C 使用遞迴和非遞迴方式實現BFS和DFS

2021-10-05 11:45:52 字數 2037 閱讀 1235

c++使用遞迴和非遞迴方式實現bfs和dfs

#include

#include

#include

using

namespace std;

int visiteddfs[5]

=;int visitedbfs[5]

=;int count_dfs =0;

int count_dfs =0;

int count_bfs =0;

int count_bfs =0;

/*深度優先遍歷的非遞迴實現,利用棧來實現*/

void

dfs(

int startnum,

int mat[

5]);

//設定乙個陣列用來判斷序號是否已被遍歷

flag[startnum -1]

=1;//cout << "深度優先遍歷:" << endl;

cout << startnum <<

" ";

while

(!s.

empty()

)//當棧不為空時迴圈執行

}//用來判斷當前序號是否有相鄰未被訪問的結點,如有則跳過,若無則棧頂元素出棧

if(i ==

5) s.

pop();

}return;}

/*深度優先遍歷的遞迴實現*/

void

dfs(

int startnum,

int mat[

5])}

/*寬度優先遍歷的非遞迴實現,利用佇列來實現*/

void

bfs(

int startnum,

int mat[

5]);

//設定乙個陣列用來判斷序號是否已被遍歷

if(flag[startnum -1]

==0)//cout << "寬度優先遍歷:" << endl;

while

(!q.

empty()

)//當佇列不為空時迴圈執行}}

return;}

/*寬度優先遍歷的遞迴實現*/

void

bfs(

int startnum,

int mat[

5])int i;

int flag =0;

for(i =

0; i <

5; i++)}

if(flag)

for(

int j =

0; j <

5; j++)}

intmain()

,,,,

};cout <<

"設定輸入矩陣如下:"

<< endl;

for(

int i =

0; i <

5; i++

) cout <<

"寬度優先遍歷非遞迴實現:"

<< endl;

bfs(

1, matrix)

; cout <<

"迴圈次數:"

<< count_bfs << endl;

cout <<

"寬度優先遍歷遞迴實現:"

<< endl;

bfs(

1, matrix)

; cout <<

"迴圈次數:"

<< count_bfs << endl;

cout <<

"深度優先遍歷非遞迴實現:"

<< endl;

dfs(

1, matrix)

; cout <<

"迴圈次數:"

<< count_dfs << endl;

cout <<

"深度優先遍歷遞迴實現:"

<< endl;

dfs(

1, matrix)

; cout <<

"迴圈次數:"

<< count_dfs << endl;

return0;

}

使用單鏈表反轉的遞迴和非遞迴實現方式

思路為將節點從前到後依次放到表頭,最後最後的節點到了最前面,最前面的節點到了最後面 listnode reverselist listnode head return head 遞迴方式 listnode reverselist2 listnode head 完整的 如下 反轉鍊錶.cpp 定義控制...

c 二分查詢實現(非遞迴和遞迴方式)

大學學資料結構時侯學的演算法,現在複習一下 include using namespace std 二分查詢思想 1 陣列從小到大排序 2 查詢的key每次和中間數比較,如果key小於mid 查詢mid左側的陣列部分 如果key大於mid,則查詢mid右側的陣列部分 如果相等,則直接返回mid。輸入...

c 二分查詢實現(非遞迴和遞迴方式)

int erfen1 int a,int key,int l,int r if a mid key int erfen2 int a,int key,int l,int r if a mid key return 1 大學學資料結構時侯學的演算法,現在複習一下 cpp view plain copy...