书P409
#include <bits/stdc++.h> using namespace std; const int SIZE=100010; int head[SIZE],ver[SIZE],Next[SIZE],tot; int Stack[SIZE*10],ans[SIZE*10]; bool vis[SIZE*10]; int n,m,top,t; void add(int x,int y) { ver[++tot]=y,Next[tot]=head[x],head[x]=tot; } void Euler() { Stack[++top]=1; while(top>0) { int x=Stack[top],i=head[x]; while(i&&vis[i]) i=Next[i]; if(i) { Stack[++top]=ver[i]; vis[i]=vis[i^1]=true; head[x]=Next[i]; } else { top--; ans[++t]=x; } } } int main() { cin>>n>>m; tot=1; for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; add(x,y); add(y,x); } Euler(); for(int i=t;i;i--) { cout<<ans[i]<<endl; } return 0; }
例题:
https://ac.nowcoder.com/acm/contest/1060/D
去掉vis标记即可