DFS + 回溯
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cctype>
#include <unordered_map>
#include <map>
#include <cstring>
using namespace std;
const int N = 1003;
int G[N][N] = {0};
int vis[N] = {0};
int n, cnt = 0;
void dfs(int s){
vis[s] = true;
if(cnt) cout<<" ";
cout<<s;
cnt++;
for(int i = 1; i <= n; i++){
if(!vis[i] && G[s][i]){
dfs(i);
cout<<" "<<s;
}
}
}
int main(){
int m, s, u, v;
cin>>n>>m>>s;
for(int i = 0; i < m; i++){
cin>>u>>v;
G[u][v] = 1;
G[v][u] = 1;
}
dfs(s);
if(cnt != n) cout<<" 0"<<endl;
return 0;
}