• 【搜索DFS】图的深度遍历(dfs)


    图的深度遍历 

    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

    #include<stdio.h>
    #include<string.h>
    #define MAXN 110
    int mapp[MAXN][MAXN];
    int vis[MAXN], cnt=0;
    
    void DFS(int t, int n)
    {
        int u = t, j;
        for(j=0; j<n; j++)
        {
            if(mapp[u][j]==1 && !vis[j])
            {
                vis[j] =1;
                cnt++;
                if(cnt==n-1)
                    printf("%d
    ", j);
                else printf("%d ", j);
                DFS(j, n);
            }
        }
    }
    
    int main()
    {
        int n, m, t;
        scanf("%d", &t);
        while(t--)
        {
            int i, x, y;
            memset(mapp, 0, sizeof(mapp));
            memset(vis, 0, sizeof(vis));
            scanf("%d%d", &n, &m);
            for(i=0; i<m; i++)
            {
                scanf("%d%d", &x, &y);
                mapp[x][y] = 1;//无向图
                mapp[y][x] = 1;
            }
            vis[0] = 1;
            printf("0 ");
            cnt = 0;
            DFS(0, n);
        }
        return 0;
    }
  • 相关阅读:
    316. 去除重复字母
    331. 验证二叉树的前序序列化
    225. 用队列实现栈
    197. 上升的温度
    178. 分数排名
    177. 第N高的薪水
    小程序导航
    css3、js动画特效
    背景透明css
    h5新标签IE8不兼容怎么办?
  • 原文地址:https://www.cnblogs.com/6bing/p/4119057.html
Copyright © 2020-2023  润新知