数据结构与算法题目集(中文) - 7-33 地下迷宫探索(30 分)

题目链接:点击打开链接

题目大意:略。

解题思路:略。

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

const int maxn=1010;

int g[1010][1010], ans[2*maxn], vis[maxn];
int n,m,s,len;

void init()
{
    len=0;
    mem(g,0);
    mem(vis,0);
}

void dfs(int s)
{
    vis[s]=1;
    for(int i=1; i<=n; i++)
    {
        if(g[s][i]==1&&!vis[i])
        {
            ans[len++]=i;
            g[i][s]=g[s][i]=-1;
            dfs(i);
            ans[len++]=s;
        }
    }
}

int main()
{
    while(~scanf("%d%d%d",&n,&m,&s))
    {
        init();
        int u,v;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&u,&v);
            g[u][v]=g[v][u]=1;
        }
        ans[len++]=s;
        dfs(s);

        for(int i=1;i<=n;i++)
            if(vis[i]!=1){ ans[len++]=0; break; }

        printf("%d",ans[0]);
        for(int i=1;i<len;i++) printf(" %d",ans[i]);
        puts("");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Dream_Weave/article/details/81188178