深度優先遍歷:
從根節點開始遍歷,從左到右依次遍歷,遍歷時應先將一條分支上遍歷完才進行下一輪遍歷。
如圖:
遍歷順序為:1 2 4 3 5
程式如下:
#include int book[101]; //用於標記是否已遍歷過,未遍歷則為值為0
int sum; //每標記一次加 1 ,直到sum等於需要遍歷的頂點個數n為止
int n,e[101][101]; //陣列e作為兩頂點之間的標記,為1則兩者之間有連線,0則代表兩者之間無連線。
void dfs(int cur)
for(i=1;i<=n;i++) //從根節點開始,依次遍歷
}}int main()
}//值為1表示兩者之間有連線,屬於同乙個分支,可繼續遍歷
for(i=1;i<=m;i++)
book[1]=1;
dfs(1); //呼叫遍歷函式
getchar();
getchar();
return 0;
}
程式執行結果:
請輸入元素個數n,以及連線次數m:
5 4
1 21 3
1 52 4
遍歷輸出結果:1 2 4 3 5
a,b輸入順序可忽略。
注:學習筆記引用於紀磊 《啊哈!演算法》資料結構 基於深度優先遍歷演算法的應用
基於深度優先遍歷演算法的應用。假設圖g採用鄰接矩陣儲存 1 判斷圖g中從頂點u到v是否存在簡單路徑 2 輸出圖g中從頂點u到v的一條簡單路徑 假設至少存在一條路徑 3 輸出從圖g中從頂點u到v的所有簡單路徑 假設至少存在一條路徑 4 輸出從圖g中從頂點u到v的長度為s的所有簡單路徑 5 求圖中通過某...
資料結構 深度優先搜尋
dfs適合此類題目 給定初始狀態跟目標狀態,要求判斷從初始狀態到目標狀態是否有解。輸入資料 若是遞迴資料結構,如單鏈表,二叉樹,集合,則百分百可以可以深搜 若是非遞迴資料結構,如一維陣列,二維陣列,字串,圖,則概念小一些.狀態轉移圖 樹 or 圖 求解目標 必須要走到最深 例如,對於樹,必須走到葉子...
樹之深度優先遍歷
直接貼 只需要修改中間列印的位置,放在最前面就是先序遍歷,放在中間,就是中序遍歷,放在後面就是後序遍歷 貼 public class main public static void initnode node head public static void printf node node clas...