分奇偶就行了
n为偶数的情况带入 1 2 3 4 5 6分析
n为奇数的情况带入 1 2 3 4 5 分析
C++ 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include<iomanip>
#include <queue>
using namespace std;
#define lowbit(x) ((x)&(-(x)))
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 1e6;
const double PI = acos(-1);
int n,x,y;
int a[N],b[N],ans[N];
void solve()
{
cin>>n;
unordered_map< int , int > mp1 , mp3;
unordered_map< int , int > mp2 ;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
//mp1 a-->b mp2 b-->a
mp1[a[i]] = b[i];
mp2[b[i]] = a[i];
mp3[a[i]]++;
mp3[b[i]]++;
}
if( n % 2 == 0)
{
ans[2] = mp1[0];
for(int i=4;i<=n;i+=2)
{
ans[i] = mp1[ ans[i-2] ];
}
ans[n-1] = mp2[0];
for(int i = n-3 ; i >= 1 ; i-=2)
{
ans[i] = mp2[ ans[i+2] ];
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<" ";
}
}
else
{
int c;
for(int i=1;i<=n;i++)
{
if(mp3[b[i]] < 2) c = b[i];
}
ans[n] = c;
ans[2] = mp1[0];
//偶数先开始
for(int i=4;i<=n;i+=2)
{
ans[i] = mp1[ans[i-2]];
}
for(int i=n-2;i>=1;i-=2)
{
ans[i] = mp2[ans[i+2]];
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<" ";
}
}
}
signed main()
{
std::ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T = 1;
//cin>>T;
while(T--)
solve();
}