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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dfs——练习demo3(20届周新杰提供)

發布時間:2024/8/26 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dfs——练习demo3(20届周新杰提供) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對此二維數組進行深度搜索與廣度搜索,并遍歷結果。

static int[][] nums = { { 0 , 1 , 0 , 0 , 0 , 0 , 0, 1 , 0},{ 1 , 0, 1 ,0 , 1 , 0 , 0 , 0 , 0},{ 0 , 1 , 0 , 1 , 0 ,0 , 0 , 0 , 0},{ 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 ,0},{ 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0},{ 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0},{ 0 , 0 , 0 , 0 , 0 , 1, 0 , 0 , 0},{ 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1},{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0}};static String res[] = {"1","2","3","4","5","6","7","8","9" };

深搜的遍歷過程就是盡可能深的搜索樹的分支,當一個節點的所有子節點都被探尋過了,搜索將回溯到發現該節點的那那條邊的起始節點
這個過程會一直持續到已發現節點可到達所有節點為止。
如果還存在未發現的節點則進程會隨便選擇一個未發現的節點重復以上的過程
整個進程直到所有節點都被訪問過為止。


深搜遍歷過程
從1開始搜索可以看到1的子節點有2、8兩個,進程會依次對其進行深度優先搜索
進程先對2進行子節點的搜索可以看出2也有兩個子節點3、5
然后進程又會對3進行子節點的搜索可以看出只有一個子節點4,而4沒有子節點了這個時候進程就會回溯到2的位置然后對5進行子節點的搜索
可以看出5的子節點也是只有一個4,但是這個時候5還有一個父節點6沒有被訪問所以進程不會回溯到2的位置
而是對6進行子節點的搜索,6的子節點只有一個7這個時候進程又會發現6有父節點8沒有訪問過
所以進程會對8再次再次進行子節點的搜索,發現子節點只有6和9但是6已經訪問過了,而9也沒有子節點
到這里樹的所有節點就完成了全部的探索了

package test; public class dfs {// 構造圖的邊private int[][] edges = { { 0 , 1 , 0 , 0 , 0 , 0 , 0, 1 , 0},{ 1 , 0, 1 ,0 , 1 , 0 , 0 , 0 , 0},{ 0 , 1 , 0 , 1 , 0 ,0 , 0 , 0 , 0},{ 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 ,0},{ 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0},{ 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0},{ 0 , 0 , 0 , 0 , 0 , 1, 0 , 0 , 0},{ 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1},{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0}};// 構造圖的頂點private String[] vertexs = {"1","2","3","4","5","6","7","8","9"};// 記錄被訪問頂點private boolean[] verStatus;// 頂點個數private int vertexsNum = vertexs.length;public void DFSTra() {verStatus = new boolean[vertexsNum];for (int i = 0; i < vertexsNum; i++) {if (verStatus[i] == false) {DFS(i);}}}// 遞歸深搜private void DFS(int i) {System.out.print(vertexs[i] + " ");verStatus[i] = true;//深度搜索子節點for (int j = firstAdjVex(i); j >= 0; j = nextAdjvex(i, j)) {if (!verStatus[j]) {DFS(j);}}}// 返回與i相連的第一個頂點private int firstAdjVex(int i) {for (int j = 0; j < vertexsNum; j++) {if (edges[i][j] > 0) {return j;}}return -1;}// 返回與i相連的下一個頂點private int nextAdjvex(int i, int k) {for (int j = (k + 1); j < vertexsNum; j++) {if (edges[i][j] == 1) {return j;}}return -1;}// 測試public static void main(String[] args) {new dfs().DFSTra();}}

深搜結果

1 2 3 4 5 6 7 8 9

總結

以上是生活随笔為你收集整理的dfs——练习demo3(20届周新杰提供)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。