数据结构实验之图论四:迷宫探索【dfs 求路径】

2023-03-09 17:05:49 浏览数 (1)

分析:起点已知,开个数组来存放路径,注意 vis 数组要初始化!另外,不能忘记了题目还要求回去的路径,只要在 dfs 之后加上就可以了。

代码语言:javascript复制
#include <bits/stdc  .h>

using namespace std;
int path[1000 * 2   10];
int vis[1005];
int gra[1002][1002];
int num = 0;
void dfs(int x, int n)
{
    vis[x] = 1;
    path[num   ] = x;
    for(int i = 1; i <= n; i   )
    {
        if(!vis[i] && gra[x][i]){
            vis[i] = 1;
            dfs(i,n);
            path[num   ] = x;
        }
    }
    return ;
}
int main()
{
    int t,n,m,s;
    while(~scanf("%d",&t)){
        while(t--)
        {
            scanf("%d%d%d",&n,&m,&s);
            for(int i = 0; i <= n; i   )
            {
                for(int j = 0; j <= n; j    )gra[i][j] = 0;
            }
            int u,v;
            for(int i = 0; i < m; i   ){
                scanf("%d%d",&u,&v);
                gra[u][v] = gra[v][u] = 1;
            }
            num = 0;
            memset(vis,0,sizeof(vis));
            dfs(s,n);
            for(int i = 0; i < num; i   )
            {
                if(i == 0)printf("%d",path[i]);
                else printf(" %d",path[i]);
            }
            if(num != 2 * n - 1)printf(" 0");
            printf("n");
        }
    }
    return 0;
}

0 人点赞