题意:遍历所有的边至少一次,所有点两次
Dfs所有的边,回溯
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int vis[10000];
struct Edge
{
int to,next;
};
Edge edge[100100];
int head[10010];
int n,m,top;
void Dfs(int v)
{
int i;
for(i=head[v];i!=-1;i=edge[i].next)
if(vis[i]==0)
{
vis[i]=1;
Dfs(edge[i].to);
}
printf("%d\n",v);
}
int main()
{
int from,to,tot;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
tot=0;
for(int i=0;i<m;i++)
{
scanf("%d%d",&from,&to);
edge[tot].to=to;
edge[tot].next=head[from];
head[from]=tot++;
edge[tot].to=from;
edge[tot].next=head[to];
head[to]=tot++;
}
Dfs(1);
}
return 0;
}