PTA-7-33 地下迷宫探索(dfs搜索)

题目:https://pintia.cn/problem-sets/15/problems/860

      输入数字n,m,s,分别表示有n个点,m条边,起点为s,之后输入m条边的起点和终点。以dfs搜索为方法,判断在图中以s为起点能否遍历到所有点,若能则输出出发的路径和回来的路径,若不能则在输出的出发路径和回来路径后加数字0;

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1001
int point[MAX][MAX];
int visited[MAX]={0};
int cnt=0;
int f=1;
void dfs(int i,int n){
    visited[i]=1;
    if(!f)       printf(" ");
    else            f=0;
    printf("%d",i);
    cnt++;
    for(int j=1;j<=n;j++){
        if(point[i][j]&&!visited[j]){
            dfs(j,n);
            printf(" %d",i);
        }
    }
}

int main(){
    int n,m,s;
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            point[i][j]=0;
    for(int i=0;i<m;i++){
        int p1,p2;
        scanf("%d%d",&p1,&p2);
        point[p1][p2]=1;    point[p2][p1]=1;
    }
    dfs(s,n);
   if(cnt<n)        printf(" 0\n");
}

猜你喜欢

转载自blog.csdn.net/qq_39681830/article/details/81346383