欧拉回路
算法概况:书本上原理的实现
时间复杂度:O(n+m)
#include<iostream>
using namespace std;
int head[100010],ver[1000010],Next[1000010],tot;
int stack[1000010],ans[1000010];
bool vis[1000010];
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;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
euler();
for(int i=t;i;i--) printf("%d\n",ans[i]);
return 0;
}测试数据
7 9 1 2 1 3 2 3 1 4 1 5 4 5 5 6 5 7 6 7


京公网安备 11010502036488号