图的深度遍历

Time Limit: 1000MS Memory limit: 65536K

题目描述

请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。

输入

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

输出

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

示例输入

1 4 4 0 1 0 2 0 3 2 3

示例输出

0 1 2 3

提示

 

来源

 

示例程序

1. #include <stdio.h>  
2. #include <string.h>  
3. int a[101][10010],visit[101],k,t;  
4. void DFS(int i)  
5.  {  
6. int j;  
7. if(visit[i]==0)  
8. if(t==0)  
9.            {  
10. "%d",i);  
11.                t=1;  
12.            }  
13. else  
14.            {  
15. " %d",i);  
16.            }  
17.            visit[i]=1;  
18. for(j=1;j<k;j++)  
19.            {  
20. if(a[i][j]==1&&!visit[j])  
21.                DFS(j);  
22.            }  
23.        }  
24.    }  
25. int main()  
26.    {  
27. int m,x,y,i,n;  
28. "%d",&n);  
29. while(n--)  
30.    {  
31.        t=0;  
32. sizeof(a));  
33. sizeof(visit));  
34. "%d%d",&k,&m);  
35. for(i=0;i<m;i++)  
36.       {  
37. "%d %d",&x,&y);  
38.           a[x][y]=1;  
39.           a[y][x]=1;  
40.       }  
41. for(i=0;i<k;i++)  
42.       {  
43. if(visit[i]==0)  
44.           DFS(i);  
45.       }  
46. "\n");  
47.    }  
48. return 0;  
49.    }  
50.