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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

bfs——练习demo2(20届周新杰提供)

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

廣度優先搜索
和深搜不同廣搜會沿著樹的高度和寬度對節點進行依次遍歷
從樹的根節點a開始,會發現a的子節點有c、d、f三個子節點,進程會先對這三個節點進行訪問然后再訪問其的子節點
對c、d、f完成訪問之后進行則會探尋這三個節點的子節點并對其進行遍歷,可以從圖中看出他們的子節點有c、g、e
可以看出c、g、e沒有子節點了所以程序對其遍歷之后隨之結束?

package test;import java.util.LinkedList; import java.util.Queue;public class bfs {// 構造圖的邊private int[][] edges = { {0,0,1,1,0,1,0},{0,0,1,0,0,0,0},{1,1,0,1,0,0,0},{1,0,1,0,0,0,0},{0,0,0,0,0,0,1},{1,0,0,0,0,0,1},{0,0,0,0,1,1,0}};// 構造圖的頂點private String[] vertexs = { "a", "b", "c", "d", "e", "f", "g" };// 記錄被訪問頂點private boolean[] verStatus;// 頂點個數private int vertexsNum = vertexs.length;// 廣搜private void BFS() {verStatus = new boolean[vertexsNum];Queue<Integer> temp = new LinkedList<Integer>();//遍歷每個節點for (int i = 0; i < vertexsNum; i++) {//判斷當前節點是否被訪問過if (!verStatus[i]) {//如果沒有被訪問的話則將其加入隊列System.out.print(vertexs[i] + " ");verStatus[i] = true;temp.offer(i);while (!temp.isEmpty()) {//將最先進入隊列的節點移除int j = temp.poll();//廣度搜索子節點for (int k = firstAdjvex(j); k >= 0; k = nextAdjvex(j, k)) {if (!verStatus[k]) {System.out.print(vertexs[k] + " ");verStatus[k] = true;temp.offer(k);}}}}}}// 返回與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] > 0) {return j;}}return -1;}// 測試public static void main(String args[]) {new bfs().BFS();} }

廣搜結果

a c d f b g e?

總結

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

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