书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标记即可

京公网安备 11010502036488号