题目链接 poj 2230
DFS从下一点继续遍历欧拉回路==然后再从此点的其他方向遍历欧拉回路-
记录是从最后一个无路的点开始记录的--如果要按方向输出的话需要反向输出----
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int head[10100];
struct node{
int to;
int w;
int next;
};
node edges[100500];
int ans[100500];
int ansi;
bool visit[100500];
void DFS(int now)
{
int k;
for (k=head[now];k!=-1;k=edges[k].next)
{
if (!visit[k])
{
visit[k]=true;
DFS(edges[k].to);
ans[ansi++]=edges[k].to;
}
}
}
int main()
{
int n,m,a,b;
while (~scanf("%d%d",&n,&m))
{
for (int i=0;i<=n;i++)
head[i]=-1;
for (int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
edges[2*i].to=b;
edges[2*i].next=head[a];
head[a]=2*i;
edges[2*i+1].to=a;
edges[2*i+1].next=head[b];
head[b]=2*i+1;
}
memset(visit,false,sizeof(visit));
ansi=0;
DFS(1);
ans[ansi++]=1;
for (int i=0;i<ansi;i++)
printf("%d\n",ans[i]);
}
return 0;
}