#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int MN=512;
struct edge{
int u,v,w;
}k;
//vector<edge>t[MN];
int m,n;
int t[MN][MN],way[MN],d[MN],cnt=0;
void find(int k){//find_circuit(结点i){
for(int i=1;i<=n;i++){//当结点i有邻居时
if(t[k][i]){//{ 选择任意一个邻居j;
t[k][i]--;
t[i][k]--;//删除边(i,j)或者做访问标记;
find(i);//find_circuit(结点j);
}
}
way[++cnt]=k;// 输出或存储节点i;
}
int main(){
cin>>m;
int u,v;
for(int i=0;i!=m;i++){
cin>>u>>v;
t[u][v]++;
t[v][u]++;
d[u]++;
d[v]++;//exist
n=max(n,max(u,v));
}
// for(int i=1;i<=n;i++){
// cout<<d[i]<<endl;
// }
int k1=600,k2=600;
for(int i=1;i<=n;i++){
if(d[i]&1)k1=min(k1,i);
else if(d[i])k2=min(k2,i);
}
if(k1!=600)find(k1);
else find(k2);
for(int i=cnt;i>=1;i--){
cout<<way[i]<<endl;
}
return 0;
}
2039 骑马修栅栏 USACO[图论—欧拉路]
最新推荐文章于 2024-07-03 12:08:23 发布