题目地址:SDUT 3361
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <bitset>
#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
using namespace std;
const int Maxn=1010;
stack<int >q;
int n,m,s;
int flag;
int cnt;
int vis[Maxn];
int mp[Maxn][Maxn];
void dfs(int sta)
{
if(sta==s&&vis[s]) return ;
for(int i=1;i<=n;i++){
if(mp[sta][i]&&!vis[i]){
if(!flag){
printf("%d",sta);
flag=1;
cnt++;
q.push(i);
vis[sta]=1;
dfs(i);
}
else{
printf(" %d",sta);
cnt++;
q.push(i);
vis[sta]=1;
dfs(i);
}
}
}
if(!q.empty()){
int t=q.top();
q.pop();
cnt++;
vis[t]=1;
printf(" %d",t);
}
}
int main()
{
int T;
int u,v;
scanf("%d",&T);
while(T--){
scanf("%d %d %d",&n,&m,&s);
memset(vis,0,sizeof(vis));
memset(mp,0,sizeof(mp));
flag=0;cnt=0;
while(m--){
scanf("%d %d",&u,&v);
mp[u][v]=mp[v][u]=1;
}
q.push(s);
dfs(s);
if(cnt!=2*n-1) printf(" 0");
puts("");
}
return 0;
}