题目:
https://www.luogu.org/problem/show?pid=2731#sub
板子题,复习一下;
坑点:两点之间可能有多条路径;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN=2001;
int ma[MAXN][MAXN],ru[MAXN],Max,Min=2147483647,tmp[MAXN];
int n,tot;
bool flag;
void dfs(int x)
{
for(int i=Min;i<=Max;i++)
{
if(ma[x][i])
{
ma[x][i]--,ma[i][x]--;
dfs(i);
}
}
tmp[++tot]=x;
}
void solve()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ma[x][y]++,ma[y][x]++;
Max=max(x,max(y,Max)),Min=min(x,min(y,Min));
ru[x]++,ru[y]++;
}
for(int i=Min;i<=Max;i++)
if(ru[i]%2)
{
flag=1;
dfs(i);
break;
}
if(!flag) dfs(Min);
for(int i=tot;i>=1;i--) printf("%d\n",tmp[i]);
return;
}
int main()
{
solve();
return 0;
}