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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法系列之图--DFS

發布時間:2025/3/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法系列之图--DFS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  深度優先搜索使用的策略是,只要與可能就在圖中盡量“深入”。DFS總是對最近才發現的結點v出發邊進行探索,知道該結點的所有出發邊都被發現為止。一旦v的所有出發邊都被發現了,搜索就回溯到v的前驅結點(v是經該結點才被發現的),來搜索該前驅結點的出發邊。該過程持續知道從源結點可以到達的所有結點都被發現為止。此后若還存在未被發現的結點,則DFS將從從未被發現的結點中任選一個結點作為新的源節點,并重復同樣的過程。

  還是老辦法,上代碼,可以清楚地解釋:

1 #include <iostream> 2 #include <list> 3 using namespace std; 4 5 class Graph{ 6 private: 7 int v;//結點數 8 list<int>* adj;//結點臨接鏈表 9 void DFSUtil(int u,bool visited[]); 10 public: 11 Graph(int v); 12 void addEdge(int start,int end); 13 void DFS(); 14 }; 15 16 Graph::Graph(int v){ 17 this->v = v; 18 adj = new list<int>[v]; 19 } 20 21 //無向圖 22 void Graph::addEdge(int start,int end){ 23 adj[start].push_back(end); 24 adj[end].push_back(start); 25 } 26 27 void Graph::DFSUtil(int u,bool visited[]){ 28 visited[u] = true; 29 cout<<u<<" "; 30 list<int>::iterator beg = adj[u].begin(); 31 for (;beg != adj[u].end();++beg){ 32 if (visited[*beg] == false) 33 DFSUtil(*beg,visited); 34 } 35 } 36 37 void Graph::DFS(){ 38 bool* visited = new bool[v]; 39 for (int i=0;i<v;i++) 40 visited[i] = false; 41 //遞歸調用dfsutil函數深度遍歷每個結點 42 for (int i=0;i<v;i++) 43 if (visited[i] == false) 44 DFSUtil(i,visited); 45 cout<<endl; 46 } 47 48 int main() 49 { 50 Graph g = Graph(8); 51 g.addEdge(0,1); 52 g.addEdge(0,2); 53 g.addEdge(0,5); 54 g.addEdge(1,3); 55 g.addEdge(2,3); 56 g.addEdge(2,4); 57 g.addEdge(2,5); 58 g.addEdge(4,5); 59 g.addEdge(6,7); 60 g.DFS(); 61 62 return 0; 63 }

需要指出的是,本例使用的是無向圖,但DFS也可以針對有向圖。

需要加以說明的是,即使該圖中有結點無法保證能到達圖中所有結點,但代碼中第42行可以保證圖中每個結點都會被訪問到。

運行結果如下:

文獻引用:算法導論->22章->基本圖算法

代碼參考:http://www.geeksforgeeks.org/depth-first-traversal-for-a-graph/

轉載于:https://www.cnblogs.com/lxiao/p/4320601.html

總結

以上是生活随笔為你收集整理的算法系列之图--DFS的全部內容,希望文章能夠幫你解決所遇到的問題。

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