图的遍历(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 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。