题目描述:
对于给定的图G,和给定的顶点V,要求从顶点V出发遍历图G,输出符合条件的广度优先序列。
输入格式:
第一行三个整数n,e,v,n表示图的顶点数(n<=100),e表示有向图的边数,v表示遍历的开始顶点;
接下来共e行,每行两个整数(i,j),为图G中的一条无向边。
输出格式:
一行输出以顶点v为起点的广度优先遍历序列,对于任一起点,首先遍历的是顶点序号最小的、尚未被访问的一条边。
样例输入:
4 5 1 1 2 1 4 2 3 2 4 3 4
样例输出:
1 2 4 3
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[101][101]={},dl[10001]={};
bool f[10001]={};
int n,e,v;
int main(){
cin>>n>>e>>v;
int x,y;
for(int i=1;i<=e;i++){
cin>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
int h=1;
int t=1;
dl[1]=1;
f[1]=1;
cout<<v<<" ";
while(h<=t){
for(int i=1;i<=n;i++){
if(a[dl[h]][i]==1&&!f[i]){
cout<<i<<" ";
t++;
dl[t]=i;
f[i]=1;
}
}
h++;
}
return 0;
}