1 # include <stdio.h>
2 # include <string.h>
3 int map[100][100],vist[100];
4 int q[100]; //优先队列存储临时值。
5 int n,m,t,flag;
6 void BFS(int t)
7 {
8 int front=0,rear=0,j,k;
9 q[rear++]=t;
10 while(front<rear)
11 {
12 k=q[front++];
13 if(flag)
14 printf(" ");
15 flag++;
16 printf("%d",k);
17 for(j=0;j<n;j++)//这个循环是找所有与k节点相邻接的节点,并将他们入栈。
18 //找完之后返回while意思是从先入栈的邻接点开始继续找邻接点的邻接点。
19 {
20 if(map[k][j]==1 && vist[j]==0)//如果map[k][j]==1的话,就表示k节点和j节点相连。
21 {
22 q[rear++]=j;
23 vist[j]=1;
24 }
25 }
26 }
27 }
28 int main()
29 {
30 int tt,u,v,t;
31 scanf("%d",&tt);
32 while(tt--)//测试数据组数;
33 {
34 memset(vist,0,sizeof(int));//标记数组初始化为0即表示节点没有被访问过;
35 memset(map,0,sizeof(int));//邻接矩阵初始化,两节点间有边相连为1无边相连为0;
36 scanf("%d %d %d",&n,&m,&t);//输入节点数n,边数m,初始遍历节点t;
37 for(int i=0;i<m;i++)//把所有边的信息存储;
38 {
39 scanf("%d%d",&u,&v);
40 map[u][v]=map[v][u]=1;
41 }
42 flag=0;//标记变量,用于输出“ ”;
43 vist[t]=1;//从起始遍历点开始遍历,并将vist[]数组值改为1;
44 BFS(t);//(利用优先队列)调用函数;
45 printf("\n");
46 }
47 return 0;
48 }