保证有欧拉回路,输出路径
这道题的话是字典序,实现的时候从1到n枚举就好了,先不管它qwq
找到度数为奇数的的点作为起点(没有的话就任意一个),
dfs,回溯时把点压进栈。
为什么不能遍跑dfs边压?考虑这张图:
边跑边压的结果是1,2,3,2,4,5,而正解(回溯)是1,2,4,5,2,3
代码如下
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #define MogeKo qwq using namespace std; const int maxn = 505; int m,x,y,s,cnt,to[maxn][maxn],inn[maxn],ans[maxn]; void dfs(int x) { for(int i = 1; i <= 500; i++) if(to[x][i]) { to[x][i]--; to[i][x]--; dfs(i); } ans[++cnt] = x; } int main() { scanf("%d",&m); for(int i = 1; i <= m; i++) { scanf("%d%d",&x,&y); to[x][y]++; to[y][x]++; inn[x]++; inn[y]++; } s = 1; for(int i = 1; i <= 500; i++) if(inn[i]%2 != 0) { s = i; break; } dfs(s); for(int i = cnt; i; i--) printf("%d ",ans[i]); return 0; }