标签:深度 bfs 技术分享 return tail head traversal main pac
#include<iostream> #include<cstdio> #include<string> #include<cstring> const int Maxn=1010; using namespace std; int m,n; int g[Maxn][Maxn]; bool b[Maxn]; void dfs(int i) { if(i<n-1) cout<<char(i+64)<<"-->"; else cout<<char(i+64);//防止最后多输出一个箭头 b[i]=1; for(int k=1;k<=n;k++) { if(g[i][k]==1&&!b[k])//如果k为是 i 的邻接顶点并且k没有被搜过 { dfs(k);//继续搜索k } } } int main() { char a,b; scanf("%d %d",&m,&n); for(int i=1;i<=n;i++) { cin>>a>>b;//需要用cin输入 g[a-64][b-64]=g[b-64][a-64]=1;//进行标记 } dfs(1); return 0; }
#include<iostream> #include<cstring> #include<string> #include<cstdio> const int Maxn=1010; using namespace std; int m,n; int g[Maxn][Maxn],que[Maxn]; bool b[Maxn]; void bfs(int u) { b[u]=1;//将第一个元素进行标记 cout<<u;//并输出 int head=0,tail=1;//制定队头与队尾 que[1]=u;//将第一个元素进队列,作为头号元素 while(head<tail)//当队头队尾重合之前 { head++;//删除第一个元素,将head指针指向下一个 for(int i=1;i<=n;i++) { if(g[que[head]][i]==1&&!b[i])//如果为此时搜索的邻接顶点并且为被标记 { b[i]==1; que[++tail]=i;//入队 } } } } int main() { char a,b; scanf("%d %d",&m,&n); for(int i=1;i<=n;i++) { cin>>a>>b; g[a-64][b-64]=1; } bfs(1); for(int i=2;i<=n;i++) { cout<<"->"<<que[i];//输出队列 } return 0; }
标签:深度 bfs 技术分享 return tail head traversal main pac
原文地址:http://www.cnblogs.com/zxqxwnngztxx/p/6682643.html