2107=数据结构实验之图论二:图的深度遍历

 1 #include <stdio.h>
 2 #include <string.h>
 3 int map[100][100];
 4 int visit[100];
 5 int k,n;//k在这里定义防止在DFS函数中再次定义使代码繁琐。
 6 void DFS(int t)//DFS函数(深度优先搜索)。
 7 {
 8     int i;//t表示此时我们处于哪个“点”。
 9     visit[t]=1;//将数组中的值变为1,表示已经搜索过。
10     for(i=0;i<k;i++)//从0开始即先遍历节点编号小的。
11     {
12         if(map[t][i]==1&&visit[i]==0)//当此点可以通过并没有搜索过时,输出此点。
13         {
14             printf(" %d",i);
15             DFS(i);//递归。
16         }
17     }
18 }
19 int main()
20 {
21     int T,i;
22     int a,b;
23     scanf("%d",&T);
24     while(T--)
25     {
26         memset(map,0,sizeof(map));
27         memset(visit,0,sizeof(visit));//将两个数组中的数据全部初始化为0。
28         scanf("%d %d",&k,&n);
29         for(i=0;i<n;i++)
30         {
31             scanf("%d %d",&a,&b);//a,b两个暂时储存数据。
32             map[a][b]=map[b][a]=1;//因为是无向边,路径为双向,并在二维数组中将两点的值变为1,表示可以通过。
33         }
34         printf("0");//0作为起始点,直接输出,在DFS函数中从0开始搜索。
35         DFS(0);
36         printf("\n");
37     }
38     return 0;
39 }

 

posted @ 2019-02-17 20:34  念文丶  阅读(321)  评论(0编辑  收藏  举报