深度優先搜尋演算法(附C 實現)

2021-08-21 16:57:34 字數 991 閱讀 5252

深度優先搜尋演算法(以下簡稱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迴圈?好吧,你肯定錯了,其實他考的就是...