zoukankan      html  css  js  c++  java
  • SDUT 3361 数据结构实验之图论四:迷宫探索

     

    数据结构实验之图论四:迷宫探索

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关;请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点?

    Input

    连续T组数据输入,每组数据第一行给出三个正整数,分别表示地下迷宫的结点数N(1 < N <= 1000)、边数M(M <= 3000)和起始结点编号S,随后M行对应M条边,每行给出一对正整数,表示一条边相关联的两个顶点的编号。

     

    Output

    若可以点亮所有结点的灯,则输出从S开始并以S结束的序列,序列中相邻的顶点一定有边,否则只输出部分点亮的灯的结点序列,最后输出0,表示此迷宫不是连通图。
    访问顶点时约定以编号小的结点优先的次序访问,点亮所有可以点亮的灯后,以原路返回的方式回到起点。

    Sample Input

    1
    6 8 1
    1 2
    2 3
    3 4
    4 5
    5 6
    6 4
    3 6
    1 5

    Sample Output

    1 2 3 4 5 6 5 4 3 2 1

    提示:通过DFS遍历完各结点时记录路径,同时记录返回的路径,一并输出,即可。

    代码实现如下(g++):
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int a[110][110];
    int b[110];//记录路径
    int vis[110];//标记各结点
    int m,k,num;
    
    void DFS(int i)
    {
        int j;
        vis[i]=1;
        b[num++]=i;//记录去时路径
        for(j=1;j<=k;j++)
        {
            if(!vis[j]&&a[i][j]==1)
            {
                vis[j]=1;
                DFS(j);
                b[num++]=i;//记录回时路径
            }
        }
    }
    
    int main()
    {
        int n,u,v,i,t;
        scanf("%d",&n);
        while(n--)
        {
            memset(a,0,sizeof(a));
            memset(vis,0,sizeof(vis));
            scanf("%d %d %d",&k,&m,&t);
            for(i=0;i<m;i++)
            {
                scanf("%d %d",&u,&v);
                a[u][v]=1;
                a[v][u]=1;
            }
            num=0;
            DFS(t);
            for(i=0;i<num;i++)
            {
                if(i==0)
                    printf("%d",b[i]);
                else
                    printf(" %d",b[i]);
            }
            if(num!=2*k-1)
            cout<<" 0";
            cout<<endl;
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 244KB
    ****************************************************/
  • 相关阅读:
    匿名函数
    内置函数
    基础函数--3
    基础函数(2)
    基础函数(1)
    文件的相关操作
    知识点补充,set集合,深浅copy
    is 和 ==的区别
    Django-form组件中过滤当前用户信息
    Django的常用模块引入整理
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9505358.html
Copyright © 2011-2022 走看看