基于邻接矩阵的广度优先搜索遍历

 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 }
View Code

 

posted on 2013-11-20 08:27  随风浪子的博客  阅读(192)  评论(0编辑  收藏  举报

导航