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...