日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基础-简单的深度优先遍历

發(fā)布時間:2024/9/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基础-简单的深度优先遍历 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

輸出1,2,3,4,5,6,7 這幾個數(shù)組成的全排列

  ps:可以使用枚舉(但是需要7層循環(huán))

使用遞歸(深度優(yōu)先遍歷的思路,DFS也可利用棧數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),LIFO)

package com.nxz.blog.otherTest;/*** 簡單的深度優(yōu)先遍歷算法學(xué)習(xí)*/ public class Test03 {/*** 輸出1,2,3,4,5,6,7的全排列* 可以將問題形象化,也就是說:將以上幾個數(shù)放到7個空的位置 □ □ □ □ □ □ □ ,使用一個變量來表示當(dāng)前處理的是第幾個框,* 使用一個長度為7的數(shù)組來表示一個數(shù)是否已經(jīng)放置過了* 當(dāng)處理當(dāng)前框的時候,需要考慮當(dāng)前位置可以放置的值有哪些(也就是進行遍歷操作),* 當(dāng)前step處理完成時候,step+1,處理下一個框,下一個框的出來過程和當(dāng)前處理過程一樣(也就是使用遞歸)** @param args*/public static void main(String[] args) {deepFirstSearch(new int[]{1, 2, 3, 4, 5, 6, 7}, 0);System.out.println("共有組合個數(shù):" + sum);}private static int[] book = new int[10];private static int[] res = new int[7];private static int sum;//最開始處理step以0開始public static void deepFirstSearch(int[] arr, int step) {//遞歸的終止條件if (step == arr.length) {for (int re : res) {System.out.print(re);}System.out.println();sum++;return;}//當(dāng)前框時,可以放置那些值for (int val : arr) {//表示當(dāng)前數(shù)還沒有放置過if (book[val] == 0) {//將當(dāng)前值標記為已放置book[val] = 1;//將arr[i]放入當(dāng)前位置res[step] = val;//處理下一個框step+1deepFirstSearch(arr, step + 1);//處理完畢后經(jīng)單簽book[i]復(fù)原book[val] = 0;}}return;} }

輸出:

1234567
1234576
1234657
1234675
1234756
1234765
1235467
1235476

。。。。。

共有組合個數(shù):5040

?

?

或者是有1-9,9個數(shù)字,把9個數(shù)字填入以下方格,并且每一個方格的數(shù)字都不同,使等式成立??□□□ +?□□□ =?□□□

這個問題可以用上邊的代碼,只是將判斷終止條件修改下,在終止時,判斷(100*方塊1 + 10 * 方塊2 + 方塊3?)+ (100 * 方塊4 + 10 * 方塊5 + 方塊6) = =100 * 方塊7 + 10 * 方塊8 + 方塊9

如果等式成立則輸出 等式,不成立則繼續(xù)

總結(jié)

以上是生活随笔為你收集整理的基础-简单的深度优先遍历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。