深度優先搜尋演算法(以下簡稱dfs)是一種用於遍歷(或搜尋)樹(或圖)的演算法。
我們構造這樣乙個圖(如圖1),並通過c++實現dfs
圖1(**於codeforces.com)
演算法過程
1.從根節點開始
2.放入乙個節點(起始時放入的為根節點)
3.如果這個節點是第一次出現,則放入堆疊中
4.判斷該節點的子節點是否搜尋完成,
a.如果是則將該節點出棧,判斷該棧是否為空
a.1 若為空則結束
a.2 若不為空則取棧頂元素,並回到第2步
b.如果沒有完成搜尋,取未被搜尋的根節點,並回到第2步
以下**在vs2017中通過編譯
#include#include#include#includeusing namespace std;
vector> tree;//宣告乙個二維向量
int flag[10];//用於搜尋到了節點i的第幾個節點
stack stk;//宣告乙個堆疊
int ar_tree[8] = ;
void dfs(int node)
int temp;
//判斷node的子節點是否搜尋完成
if (flag[node] < tree[node].size())
else }}
int main()
//dfs
cout << "dfs過程:" << endl;
dfs(1);
cout << endl;
return 0;}
輸入結果如下
事實上,dfs函式可以通過更短的**實現,如下
void dfs(int node)
}
不過,依賴二叉樹等資料結構實現的深度優先搜尋演算法,會更加簡 廣度優先搜尋演算法(附C 實現)
這一篇文章將對bfs作出介紹。佇列的push操作將元素新增到佇列的末尾,但pop操作將佇列的第乙個元素彈出,這與堆疊有差異。我們構造這樣乙個圖 如圖1 並通過c 實現bfs,本文處理的圖比二叉樹要更複雜,如果時針對二叉樹的bfs,程式會更為簡單 演算法過程 1.將根節點放入佇列中 2.從佇列中取出第...
深度優先搜尋演算法
include include define vertexnum 9 struct node typedef struct node graph struct node head vertexnum 定義圖形結構 int visited vertexnum 頂點陣列 深度優先搜尋 void dfs ...
深度優先搜尋演算法
今天我們來複習一下萬能的搜尋演算法之深度優先搜尋演算法。深度優先搜尋演算法顧名思義就是按照樹的延伸不停的往下搜尋,直到樹的盡頭之後再一步一步的回溯回來。好吧,我們直接問你乙個問題,給你乙個數n,讓你輸出從1到這個樹的全排列,你會怎麼寫,會不會想到去用若干個for迴圈?好吧,你肯定錯了,其實他考的就是...