AcWing 366 看牛:双向欧拉路
作者:
b507jiang
,
2021-06-16 09:49:03
,
所有人可见
,
阅读 337
#include <bits/stdc++.h>
using namespace std;
const int N=10010,M=100010;
int ver[M],nxt[M],head[N],tot;
int n,m,q[M],top,ans[M],cnt;
void add(int x,int y){
ver[++tot]=y,nxt[tot]=head[x],head[x]=tot;
}
void dfs(int x){
while(head[x]){
int i=head[x];
head[x]=nxt[i];
int y=ver[i];
dfs(y);
}
ans[++cnt]=x;
}
void eular(){
q[++top]=1;
while(top){
int x=q[top],i=head[x];
if(i){
head[x]=nxt[i];
q[++top]=ver[i];
continue;
}
ans[++cnt]=x;
top--;
}
}
int main(){
cin>>n>>m;
tot=1;
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
add(a,b), add(b,a);
}
//dfs(1);
eular();
for(int i=cnt;i;i--)
printf("%d\n",ans[i]);
return 0;
}