就是欧拉回路裸题啦。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; inline int read(){ int t=1,num=0;char c=getchar(); while(c>'9'||c<'0'){if(c=='-')t=-1;c=getchar();} while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();} return num*t; } int map[501][501],cnt=0,n,m,s=1,d[501],ans[501]; void solve(int i){ for(int j=1;j<=n;j++){ if(map[i][j]){ map[i][j]--; map[j][i]--; solve(j); } } ans[++cnt]=i; } int main() { m=read(); for(int i=1;i<=m;i++){ int x=read(),y=read(); map[x][y]++;map[y][x]++; d[x]++;d[y]++; if(x>n)n=x;if(y>n)n=y; } for(int i=1;i<=n;i++) if(d[i]&1){s=i;break;} solve(s); for(int i=cnt;i>=1;i--)printf("%d\n",ans[i]); return 0; }
本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。