图的遍历(bfs+dfs)模板
Posted 自为
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的遍历(bfs+dfs)模板相关的知识,希望对你有一定的参考价值。
bfs
1 #include<iostream> 2 #include<queue> 3 #include<cstdio> 4 using namespace std; 5 queue<int>q; 6 int map[1001][1001]; 7 int vis[1001]; 8 int n,m; 9 void bfs(int p) 10 { 11 q.push(p); 12 vis[p]=1; 13 printf("%c-->",char(q.front()+64)); 14 while(q.size()!=0) 15 { 16 int k=q.front(); 17 q.pop(); 18 for(int i=1;i<=n;i++) 19 { 20 21 if(vis[i]==0&&map[k][i]==1) 22 { 23 printf("%c-->",char(i+64)); 24 //q.pop(); 25 q.push(i); 26 vis[i]=1; 27 } 28 } 29 } 30 } 31 int main() 32 { 33 34 scanf("%d%d",&n,&m); 35 for(int i=1;i<=m;i++) 36 { 37 char x,y; 38 //scanf("\n%d %d",&x,&y); 39 cin>>x>>y; 40 x=x-64; 41 y=y-64; 42 map[x][y]=map[y][x]=1; 43 } 44 bfs(1); 45 return 0; 46 }
dfs
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int map[1001][1001]; 5 int vis[1001]; 6 int n,m; 7 void dfs(int p) 8 { 9 vis[p]=1; 10 printf("%c --> ",char(p+64)); 11 for(int i=1;i<=n;i++) 12 { 13 if(vis[i]==0&&map[p][i]==1) 14 { 15 16 dfs(i); 17 } 18 //else 19 //return ; 20 } 21 } 22 int main() 23 { 24 25 scanf("%d%d",&n,&m); 26 for(int i=1;i<=m;i++) 27 { 28 char x; 29 char y; 30 scanf("\n%c %c",&x,&y); 31 //cin>>x>>y; 32 x=x-64; 33 y=y-64; 34 map[x][y]=map[y][x]=1; 35 } 36 dfs(1); 37 return 0; 38 }
以上是关于图的遍历(bfs+dfs)模板的主要内容,如果未能解决你的问题,请参考以下文章
模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra
快速排序模板秦九昭算法模板深度优先搜索DFS广度优先搜索BFS图的遍历逆元中国剩余定理斯特林公式
图的深度优先遍历DFS和广度优先遍历BFS(邻接矩阵存储)超详细完整代码进阶版