题目: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");
}