图的深度遍历

来源:互联网 发布:qq影音mac官方下载 编辑:程序博客网 时间:2024/06/07 01:05

图的深度遍历

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的遍历结果。

示例输入

14 40 10 20 32 3

示例输出

0 1 2 3

提示

 

来源

 

示例程序

view plaincopyprint如果您复制代码时出现行号,请点击左边的“view plain”后再复制
  1. #include<stdio.h>  
  2. #include<string.h>  
  3.   
  4. int k, m, f;  
  5. int map[200][200], visit[200];  
  6.   
  7. int dfs(int i)  
  8. {  
  9.     visit[i]=1;  
  10.     f==0 ? printf("%d", i) : printf(" %d", i);  
  11.     f=1;  
  12.     for(int j=0;j<k;j++)  
  13.     {  
  14.         if(visit[j]==0 && map[i][j]==1)  
  15.         {  
  16.             dfs(j);  
  17.         }  
  18.     }  
  19.     return 0;  
  20. }  
  21.   
  22. int main()  
  23. {  
  24.     int n, u, v;  
  25.     scanf("%d", &n);  
  26.     while(n--)  
  27.     {  
  28.         memset(map,0,sizeof(map));  
  29.         memset(visit,0,sizeof(visit));  
  30.         scanf("%d%d", &k, &m);  
  31.         for(int i=0;i<m;i++)  
  32.         {  
  33.             scanf("%d%d", &u, &v);  
  34.             map[u][v]=map[v][u]=1;  
  35.         }  
  36.         f=0;  
  37.         for(int i=0;i<k;i++)  
  38.         {  
  39.             if(visit[i]==0)  
  40.             {  
  41.                 dfs(i);  
  42.             }  
  43.         }  
  44.         printf("\n");  
  45.     }  
  46.     return 0;  
  47. }  
  48.    
  49.   

 

0 0