SDUT 2017 图的深度遍历

 题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2107

 裸DFS。

 1 #include <stdio.h>

 2 #include <string.h>

 3 int p[101][101],o[101],num[101],z;

 4 void dfs(int k,int v)

 5 {

 6     int i;

 7     o[v] = 1;

 8     num[z] = v;

 9     z ++;

10     for(i = 0;i <= k-1;i ++)

11     {

12         if(p[v][i] == 1 && o[i] == 0)

13         {

14             dfs(k,i);

15         }

16     }

17 }

18 int main()

19 {

20     int n,k,m,u,v,i,j,t;

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

22     while(n--)

23     {

24         memset(p,0,sizeof(p));

25         memset(o,0,sizeof(o));

26         memset(num,0,sizeof(num));

27         scanf("%d%d",&k,&m);

28         z = 0;

29         t = 0;

30         for(i = 1;i <= m;i ++)

31         {

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

33             p[v][u] = 1;

34             p[u][v] = 1;

35         }

36         for(i = 0;i <= k-1;i ++)

37         {

38             for(j = 0;j <= k-1;j ++)

39             {

40                 if(p[i][j] == 1)

41                 {

42                     dfs(k,i);

43                     t = 1;

44                     break;

45                 }

46             }

47             if(t) break;

48         }

49         for(i = 0;i <= z-1;i ++)

50         {

51             if(i != z-1)

52             printf("%d ",num[i]);

53             else

54             printf("%d\n",num[i]);

55         }

56     }

57 }

 

你可能感兴趣的:(遍历)