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

题目描述

给定一个无向连通图,顶点编号从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<stdio.h>

 2 #include<string.h>

 3 int map[101][101];

 4 int vis[101],que[101];

 5 int m,k,t,flag;

 6 void bfs(int t)  //广度优先遍历

 7 {

 8     int l=0,r=0,j;

 9     int i;

10     que[r]=t;

11     r++;

12     for(i=0;i<r;i++)

13     {

14 

15         l++;

16         if(flag==1)

17         {

18             printf("%d",que[l-1]);

19             flag=0;

20         }

21         else

22         printf(" %d",que[l-1]);

23         for(j=0;j<k;j++)

24         {

25             if(!vis[j]&&map[que[l-1]][j])

26             {

27                 que[r]=j;

28                 r++;

29                 vis[j]=l;

30             }

31         }

32     }

33 }

34 int main()

35 {

36     int h,n,i,u,v;

37     scanf("%d",&n);

38     for(h=1;h<=n;h++)

39     {

40         memset(vis,0,sizeof(vis));

41         memset(map,0,sizeof(map));

42         scanf("%d %d %d",&k,&m,&t);

43         for(i=0;i<m;i++)

44         {

45             scanf("%d %d",&u,&v);

46             map[u][v]=1;

47             map[v][u]=1;

48         }

49         flag=1;

50         vis[t]=1;

51         bfs(t);

52         printf("\n");

53     }

54     return 0;

55 }
View Code

 

你可能感兴趣的:(数据结构)