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 }