这个题是一个比较简单的欧拉回路题,最开始没有注意到是special judge,所以一直觉得WA,结果交上去AC。
一个DFS就可以搞定。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAX 2000
int map[MAX][MAX],cnt[MAX],vis[MAX],ver[MAX][MAX],ans[MAX],top;
using namespace std;
int cmp(const void *a,const void *b)
{
return *(int*)a>*(int*)b;
}
void DFS(int x)
{
for(int i=0;i<cnt[x];i++)
{
int ita=ver[x][i];
if(!vis[ita])
{
vis[ita]=1;
DFS(map[x][ita]);
ans[top++]=ita;
}
}
}
int main()
{
int x,y,z,n,st;
while(scanf("%d%d",&x,&y)&&(x||y))
{
memset(map,0,sizeof(map));
memset(cnt,0,sizeof(cnt));
scanf("%d",&z);
map[x][z]=y;
map[y][z]=x;
ver[x][cnt[x]++]=z;
ver[y][cnt[y]++]=z;
n=max(x,y);
st=min(x,y);
while(scanf("%d%d",&x,&y)&&(x||y))
{
scanf("%d",&z);
map[x][z]=y;
map[y][z]=x;
ver[x][cnt[x]++]=z;
ver[y][cnt[y]++]=z;
}
int flag=0;
for(int i=0;i<=50;i++)
if(cnt[i]&1)
{
flag=1;
break;
}
if(flag)
printf("Round trip does not exist.\n");
else
{
memset(vis,0,sizeof(vis));
top=0;
DFS(st);
for(int i=top-1;i>=0;i--)
printf("%d%c",ans[i],i==0?'\n':' ');
}
}
return 0;
}