圖的遍歷:DFS和BFS演算法- IT閱讀
文章推薦指數: 80 %
以上是最基本的dfs演算法實現,事實上,程式碼結構絕不是一成不變的。
例如,應用dfs求一串元素的所有可能的排列,抽象出來的圖的分支就十分龐大。
我們不 ...
圖的遍歷:DFS和BFS演算法
首頁
最新
HTML
CSS
JavaScript
jQuery
Python3
Python2
Java
C
C++
Go
SQL
首頁
最新
Search
圖的遍歷:DFS和BFS演算法
2019-02-06254
DFS(深度優先演算法)
1.原理概述
最基本的DFS是用來解決無向圖的遍歷問題的。
無向圖用沿主對角線對稱的鄰接矩陣儲存。
DFS演算法最基本的程式碼實現如下:
voiddfs(intcur)//cur是當前所在的頂點編號
{
sum++;//每訪問一個頂點,sum+1
if(sum==n)return;
for(i=1;i<=n;i++)//從1號頂點到n號頂點依次嘗試,看哪些頂點與當前頂點cur有邊相連
{
if(e[cur][i]==1&&book[i]==0)
{
book[i]=1;//標記頂點i已經訪問過
dfs(i);//從頂點i再出發繼續遍歷
}
}
}
上面,cur儲存當前正在遍歷的頂點,二維陣列e儲存的是圖的邊(鄰接矩陣),book用來記錄哪些頂點已經訪問過,sum用來記錄已經訪問過的頂點個數,n儲存圖中頂點的總個數。
2.用DFS求所有可能的排列組合
以上是最基本的dfs演算法實現,事實上,程式碼結構絕不是一成不變的。
例如,應用dfs求一串元素的所有可能的排列,抽象出來的圖的分支就十分龐大。
我們不關心對整張圖的全部遍歷,而是希望分別輸出每種可能的完整排列順序。
這就需要將dfs的步驟改成:
定義全域性的用於存放所有解的物件和存放一次解的物件。
在遞迴函式中,確定遞迴終止條件(一般為sum==n),並在終止時將一次完整的解存檔。
在遞迴函式中,若沒有終止,程式碼結構應該是:則先執行動作,呼叫遞迴,再撤銷動作。
一個完整的實現程式碼為:
voiddfs(ints,vector
希望找到一種最少轉機的方法。
這個問題中,我們不關心兩個城市間的往來時間(邊的權值),如果可以往來,一律視為有權值為1的邊。
我們關心從城市A到B經過的邊的數量最少。
這也是DFS和BFS的不同應用之處。
核心程式碼如下:
while(head
延伸文章資訊
- 1深度優先搜尋- 維基百科,自由的百科全書
深度優先搜尋演算法(英語:Depth-First-Search,DFS)是一種用於遍歷或搜尋樹或圖的演算法。這個演算法會儘可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過,搜尋 ...
- 2「dfs應用」懶人包資訊整理(1)
103資訊學科培訓圖論圖論- BFS & DFS & 應用. 講者:林庭宇. 前情提要. 各位認識圖嗎? 基本概念. BFS & DFS 就是圖形的「搜索」; 實作時分別需要用到Queue & ...
- 3DAY11 - DFS應用 - iT 邦幫忙
DAY11 - DFS應用. 算法與數據結構&力扣例題實戰系列第11 篇. raychang0901. 4 個月前‧ 289 瀏覽. 0. 昨天寫了DFS模板,今天就搭配模板放幾題DFS的例題!!
- 4圖的遍歷:DFS和BFS演算法- IT閱讀
以上是最基本的dfs演算法實現,事實上,程式碼結構絕不是一成不變的。 例如,應用dfs求一串元素的所有可能的排列,抽象出來的圖的分支就十分龐大。我們不 ...
- 5dfs與bfs的簡單總結及應用 - 台部落
dfs與bfs的簡單總結及應用 ... (1):深度優先搜索(Depth-First-Search)是搜索算法的一種。是沿着樹的深度遍歷樹的節點,儘可能深的搜索樹的分支。當節點v ...