Watchcow

时间:2023-03-09 22:00:11
Watchcow

传送门

题目大意:

给你一幅连通的图,要求从起点1开始走,要经过每条边刚好两次,并且最终回到1起点。

思路:将无向图转换成有向图求欧拉回路。

#include<cstdio>
#define N 11000
#define M 110000//由于是将无向图转换成有向图,所以边变为原来的两倍。
//因此*2,这个地方调了好几天,满满的都是泪啊。
int n,m;
struct map
{
int tot;
int head[N],v[M],pre[M];
/*
pre[]里存的是a点连得另一个点的编号。
v[]存的是当前边连得b点。
*/
bool f[M];
void addedge(int a,int b)
{
tot++;
v[tot]=b;
pre[tot]=head[a];
head[a]=tot;
}
}G;
void dfs(int now)
{
for (int p=G.head[now];p;p=G.pre[p])
{
if (!G.f[p])
{
G.f[p]=;
dfs(G.v[p]);
}
}
printf("%d\n",now);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
G.addedge(a,b);
G.addedge(b,a);
}
dfs();
return ;
}