题目描述
一个有n个结点的无向连通图,这些结点以编号:1、2、……n进行编号,现给出结点间的连接关系。请以结点1为起点,按广度优先搜索(bfs)、优先访问小编号结点的顺序遍历并输出该图。
输入格式
第一行为两整数,n和e,表示n个顶点,e条边;(2<=n,e<=10)
以下e行每行两个数,表示两个结点是联通的。
输出格式
只有一行,为节点按照广度优先、小编号结点优先访问的结果。
样例输入content_copy
5 7
1 2
1 3
1 4
2 4
2 5
3 5
4 5
样例输出
1 2 3 4 5
提示/说明
9 10
1 2
1 5
1 7
2 3
2 5
3 4
5 6
6 7
6 8
8 9
1 2 5 7 3 6 4 8 9
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,e,x,y,h,t=1;
int a[10001];
bool dp[1001][1001],k[1001];
void bfs(){
int l,flag=1,t1;
while(h<t){
k[a[h]]=true;
l=h;
flag=0;
t1=a[h];
cout<<a[h]<<" ";
h++;
for(int i=1;i<=n;i++){
if(!k[i]&&dp[t1][i]){
k[i]=1;
a[t++]=i;
flag=1;
}
}
}
return;
}
int main(){
cin>>n>>e;
for(int i=0;i<e;i++){
cin>>x>>y;
dp[x][y]=1;
dp[y][x]=1;
}
a[0]=1;
k[1]=1;
bfs();
return 0;
}