图的深度遍历

来源:互联网 发布:高仿鞋淘宝店 编辑:程序博客网 时间:2024/05/16 10:37

Description

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

Input

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

Output

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

Sample Input

14 40 10 20 32 3

Sample Output

0 1 2 3

#include <stdio.h>#include <string.h>int mp[200][200];int vis[200];void dfs(int u,int k){    vis[u]=1;    if(u==0)            //若为起始点,输出时前面没空格    printf("%d",u);    else    printf(" %d",u);    for(int i=0;i<k;i++)    {        if(!vis[i]&&mp[u][i]==1)            dfs(i,k);    }}int main(){    int n,k,m,u,v;    scanf("%d",&n);    while(n--)    {        memset(vis,0,sizeof(vis));        memset(mp,0,sizeof(mp));        scanf("%d%d",&k,&m);        while(m--)        {            scanf("%d%d",&u,&v);            mp[u][v]=1;             //之间有连线,标记为1            mp[v][u]=1;        }        for(int i=0; i<k; i++)        {            if(!vis[i])                dfs(i,k);        }        printf("\n");    }    return 0;}


0 0