图的深度遍历
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.