思路:先判断是不是存在欧拉回路,然后把边排序,dfs
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=50;
const int maxm=2050;
vector<pair<int,int> > grid[maxn];
vector<int> ans;
bool vis[maxm],visv[maxn];
int deg[maxn];
void dfs(int u)
{
int len=grid[u].size();
for(int i=0;i<len;i++)
{
int v=grid[u][i].second,bian=grid[u][i].first;
if(vis[bian])continue;
vis[bian]=1;
dfs(v);
ans.push_back(bian);
}
}
void solve()
{
for(int i=0;i<maxn;i++)sort(grid[i].begin(),grid[i].end());
ans.clear();
memset(vis,0,sizeof(vis));
memset(visv,0,sizeof(visv));
dfs(1);
int len=ans.size();
for(int i=len-1;i>0;i--)cout<<ans[i]<<" ";
cout<<ans[0]<<endl;
}
int main()
{
freopen("in.txt","r",stdin);
int x,y,z;
bool flag=true;
while(scanf("%d%d",&x,&y)!=EOF)
{
if(x==0&&y==0)break;
memset(deg,0,sizeof(deg));
for(int i=0;i<maxn;i++)grid[i].clear();
scanf("%d",&z);
deg[x]++,deg[y]++;
grid[x].push_back(make_pair(z,y));
grid[y].push_back(make_pair(z,x));
while(scanf("%d%d",&x,&y)!=EOF)
{
if(x==0&&y==0)break;
scanf("%d",&z);
deg[x]++,deg[y]++;
grid[x].push_back(make_pair(z,y));
grid[y].push_back(make_pair(z,x));
}
bool flag=true;
for(int i=1;i<maxn;i++)
if(deg[i]%2)
{
printf("Round trip does not exist.\n");
flag=false;
break;
}
if(flag)
solve();
}
return 0;
}