易错点:
- ans和stack数组应当开到MAXM.
#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=2e4,MAXM=1e5;
struct Edge{
int from,to,w,nxt;
}e[MAXM];
int head[MAXN],edgeCnt=1;
void addEdge(int u,int v,int w){
e[++edgeCnt].from=u;
e[edgeCnt].to=v;
e[edgeCnt].w=w;
e[edgeCnt].nxt=head[u];
head[u]=edgeCnt;
}
int ans[MAXM],ansCnt=0;//
int stck[MAXM],top=0;//
void euler(){
stck[++top]=1;
while(top){
int x=stck[top];
if(!head[x]){
ans[++ansCnt]=x;
top--;
}else{
stck[++top]=e[head[x]].to;
head[x]=e[head[x]].nxt;
}
}
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
addEdge(u,v,1);
addEdge(v,u,1);
}
euler();
for(int i=1;i<=ansCnt;i++)
printf("%d\n",ans[i]);
return 0;
}