Problem Description
给出图的顶点数和顶点与顶点之间的连接关系,请输出用邻接矩阵存储的图的广度优先搜索顶点序列。
Input
输入的第一行是一个整数T表示测试示例的数目,每组示例的第一行有两个数m(2<=m<=10)和n(1<=n<=m*(m-1)/2),m表示顶点的个数(顶点的标号从1-m),n表示边的个数。下面n行的每行有两个顶点号表示一条边。后面一行是一个数k,k表示需要搜索的顶点数量。后面k行每行有一个数表示从该顶点开始搜索。在搜索过程中与同一个顶点相邻的顶点按顶点标号从小到大进行搜索。
Output
每组输出k行,每行为从输入的一个顶点开始搜索的广度优先搜索序列。每组搜素结果之间用空行隔开。
Sample Input
1 2 1 1 2 2 1 2
Sample Output
1 2 2 1
//标程:
#include<iostream> #include<cstring> #include<queue> using namespace std; int edge_num,point_num,start_point,cnt; int map[15][15], visited[15]; queue<int> q_map; void bfs() { while(!q_map.empty()) { int temp_point=q_map.front(); cnt++; if(cnt<point_num) cout<<temp_point<<" "; if(cnt==point_num) cout<<temp_point<<endl; q_map.pop(); for(int i=1;i<=point_num;i++) { if(visited[i]!=1 && map[temp_point][i]==1) { visited[i]=1; q_map.push(i); } } } } int main() { // freopen("b.txt","r",stdin); int group_num,i,point1,point2; cin>>group_num; while(group_num--) { cin>>point_num>>edge_num; while(!q_map.empty()) q_map.pop(); memset(map,0,sizeof(map)); for(i=1;i<=edge_num;i++) { cin>>point1>>point2; map[point1][point2]=map[point2][point1]=1; } int ask; cin>>ask; for(i=1;i<=ask;i++) { memset(visited,0,sizeof(visited)); cin>>start_point; visited[start_point]=1; q_map.push(start_point); cnt=0; bfs(); } if(group_num!=0) cout<<endl; } return 0; }