题目大意:
从起点回到起点,每条路走过去在返回。
解题思路:
欧拉回路的简单变形
#include<stdio.h>
#define N 50005
struct node{
int to;
int next;
}edg[N*2];
int heap[N*2],h;
void add(int a,int b)
{
edg[h].to=b;
edg[h].next=heap[a];
heap[a]=h++;
edg[h].to=a;
edg[h].next=heap[b];
heap[b]=h++;
}
int ansi=0 ,ans[N];
bool visit[N*2];
void dfs(int now)
{
int k;
for(k=heap[now];k!=-1;k=edg[k].next)
{
if(!visit[k])
{
visit[k]=true;
dfs(edg[k].to);
// printf("%d\n",now);
}
}
printf("%d\n",now);
}
void initi(int n)
{
int i;
for(i=0;i<=n;i++)
{
visit[i]=false;
ans[i]=-1;
ansi=0;
heap[i]=edg[i].to=edg[i].next=-1;
}
h=0;
}
int main()
{
int n,m,a,b;
int i;
scanf("%d%d",&n,&m);
initi(n);
while(m--)
{
scanf("%d%d",&a,&b);
add(a,b);
}
puts("1");
dfs(1);
for(i=0;i<ansi;i++)
{
printf("%d\n",ans[i]);
}
return 0;
}