典型的求欧拉回路,仔细一点就行了
注意
节点间可能有很多条边
/*
PROG:fence
LANG:C++
*/
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 501;
int d[MAXN], tot, ans[10000], n, up, down = ~0U>>1;
int a[MAXN][MAXN];
void dfs(int x)
{
for (int i = 1;i <= up;++i)
{
if (a[x][i])
{
--a[x][i], --a[i][x];
dfs(i);
}
}
ans[++tot] = x;
}
int main()
{
freopen("fence.in", "r", stdin);
freopen("fence.out", "w", stdout);
scanf("%d", &n);
int x, y;
for (int i = 1;i <= n;++i)
{
scanf("%d%d", &x, &y);
up = max(x, up), up = max(y, up);
++d[x], ++d[y];
++a[x][y], ++a[y][x];
}
for (int i = 1;i <= up;++i)
{
if (d[i]) down = min(i, down);
if (d[i] & 1) { down = i; break; }
}
dfs(down);
for (int i = tot;i > 0;--i)
printf("%d\n", ans[i]);
}