数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历(BFS)

题目描述

给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)

输入

输入第一行为整数n(0< n <100),表示数据的组数。
对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。
下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。

输出

输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。

示例输入

1
6 7 0
0 3
0 4
1 4
1 5
2 3
2 4
3 5

示例输出

0 3 4 2 5 1
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<queue>
 5 #include<cstdlib>
 6 
 7 using namespace std;
 8 int map[105][105];
 9 int visited[105];
10 int mark=1;
11 int i,root,bian;
12 
13 queue<int> q;
14 
15 void bfs(int h,int bian)
16 {
17     memset(visited,0,sizeof(visited));
18     q.push(h);
19     visited[h]=1;
20     while(!q.empty())
21     {
22         int t=q.front();
23         q.pop();
24         if(mark)
25         {
26             printf("%d",t);
27             mark=0;
28         }
29 
30         else printf(" %d",t);
31         for(i=0; i<bian; i++)
32         {
33             if(!visited[i]&&map[t][i])
34             {
35                 q.push(i);
36                 visited[i]=1;
37             }
38         }
39     }
40 }
41 
42 int main()
43 {
44 
45     int root,bian,h;
46     int n,i,j,x,y;
47     scanf("%d",&n);
48     for(i=0; i<n; i++)
49     {
50         memset(map,0,sizeof(map));
51         scanf("%d%d%d",&root,&bian,&h);
52         for(j=0; j<bian; j++)
53         {
54             scanf("%d%d",&x,&y);
55             map[x][y]=map[y][x]=1;
56         }
57         bfs(h,bian);
58         printf("
");
59     }
60     return 0;
61 }
原文地址:https://www.cnblogs.com/wlc297984368/p/3253059.html