判断是否存在欧拉回路,主要是还要判断图是否连通。
#include<stdio.h>
#include<string.h>
int point[1010],pre[1010];
struct p
{
int u,v;
}eg[10010];
int find(int root)
{
int now,w=root;
while(pre[root]!=root)
root=pre[root];
while(pre[w]!=root)
{
now=pre[w];
pre[w]=root;
w=now;
}
return root;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&n)
{
memset(point,0,sizeof(point));
bool flag=false;
int k=0;
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
point[u]=point[u]^1;
point[v]=point[v]^1;
eg[k].u=u;
eg[k++].v=v;
}
for(int i=1;i<=n;i++)
pre[i]=i;
for(int i=0;i<k;i++)
{
int x=find(eg[i].u),y=find(eg[i].v);
if(x!=y)
pre[y]=x;
}
int root=pre[1];
for(int i=2;i<=n;i++)
if(pre[i]!=root)
{
printf("0\n");
flag=true;
break;
}
for(int i=1;i<=n;i++)
if(point[i]&&!flag)
{
printf("0\n");
flag=true;
break;
}
if(!flag)
printf("1\n");
}
return 0;
}