資料結構 遞迴與非遞迴實現DFS與BFS

2022-09-01 21:09:16 字數 1928 閱讀 9910

我皮了一下用 c++c++c+

+ 的vector寫的,其實也不難詳情請參見** , 如果有不會dfs與bfs的

參見 : 資料

遞迴bfs

#include

using namespace std;

const

int maxn =

1e5+50;

vector<

int>g[maxn]

;int n ,m ,u ,v ,st ;

queue<

int>que ;

void

bfs(

int st)if(

!que.

empty()

)}intmain()

printf

("請輸入起點位置: ");

scanf

("%d"

,&st)

;printf

("bfs遞迴遍歷結果為: ");

printf

("%d "

,st)

;bfs

(st)

;return0;

}

非遞迴bfs

#include

using namespace std;

const

int maxn =

1e5+50;

vector<

int>g[maxn]

;int n ,m ,u ,v ,st ;

void

bfs(

int st)}}

intmain()

printf

("請輸入起點位置: ");

scanf

("%d"

,&st)

;printf

("bfs非遞迴遍歷結果為: ");

bfs(st)

;return0;

}

遞迴dfs

#include

using namespace std;

const

int maxn =

1e5+50;

vector<

int>g[maxn]

;int n ,m ,u ,v ,st ;

void

dfs(

int st)

}int

main()

printf

("請輸入起點位置: ");

scanf

("%d"

,&st)

;printf

("dfs遞迴遍歷結果為: ");

printf

("%d "

,st)

;dfs

(st)

;return0;

}

非遞迴dfs

#include

using namespace std;

const

int maxn =

1e5+50;

vector<

int>g[maxn]

;stack<

int>sta ;

int n ,m ,st ,u ,v ;

void

dfs(

int st)

printf

("%d "

,top);}

}int

main()

printf

("請輸入起點位置: ");

scanf

("%d"

,&st)

;printf

("dfs遞迴遍歷結果為: ");

dfs(st)

;return0;

}

資料結構 非遞迴

include stdafx.h include using namespace std 二叉樹鏈式儲存的標頭檔案 typedef char datatype 結點屬性值型別 typedef struct node 二叉樹結點的型別 bintnode typedef bintnode bintree...

資料結構 演算法 14 遞迴 轉非遞迴

目錄遞迴 改為非遞迴 遞迴是一種應用非常廣泛的演算法 程式設計技巧,如 所有的遞迴都可以轉為非遞迴實現。李柱明部落格 遞迴的定義 遞迴與棧結構 優點 遞迴 的表達力很強,寫起來非常簡潔。缺點 空間複雜度高。有堆疊溢位的風險。存在重複計算。過多的函式呼叫會耗時較多。遞迴需要滿足的兩個條件 乙個問題可以...

非遞迴dfs演算法

都說現今記憶體不值錢了,哈,也就不考慮空間複雜度的問題了,弄了倆輔助陣列,覺得解這題還是挺容易的,就是不知道有沒有bug。問題描述 假設圖g採用鄰接表儲存,編寫乙個實現連通圖g的深度優先遍歷 從頂點v出發 的非遞迴演算法。演算法思路 就是深度優先的思路。同樣是乙個visited陣列,標記已訪問過的頂...