题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2141.html
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[101][101];
int visited[101];
int b[101];
int num;
int k,m,t;
void BFS(int s)
{
// cout<<"dwdawd"<<endl;
b[++num]=s;
queue<int >wakaka;
wakaka.push(s);
while(!wakaka.empty())
{
int top=wakaka.front();
wakaka.pop();
for(int i=0; i<k; i++)
{
if(visited[i]==0&&a[i][top]==1)
{
visited[i]=1;
b[++num]=i;
// cout<<b[num]<<endl;
wakaka.push(i);
// visited[i]=0;
}
}
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
num=0;
cin>>k>>m>>t;
memset(a,0,sizeof(a));
memset(visited,0,sizeof(visited));
for(int i=1; i<=m; i++)
{
int u,v;
cin>>u>>v;
a[u][v]=a[v][u]=1;
}
visited[t]=1;
BFS(t);
for(int i=1; i<=num; i++)
{
if(i==1)
cout<<b[i];
else
cout<<" "<<b[i];
}
cout<<endl;
}
return 0;
}
反思:把BFS和DFS看成一棵树,BFS是一层一层的往下走,每一次都走遍当前层的所有。而DFS是一路走到底,走不动了再返回到上一级,然后再往下走,逐渐循环。