您的位置:首页 > 其它

hdu 1878 欧拉回路

2013-04-22 17:07 267 查看
刚开始一直不明白怎么判断欧拉回路,网上搜了一下,就是判断接入每一个点的度(他们称之为度)是不是偶数,如果全是偶数且图联通,就存在欧拉回路,否则不存在。

至于判断图是不是联通,直接用并查集判断就行。

#include<stdio.h>
#define N 1005
int mark
,rank
,num
;
int n,m;
void value()
{
int i;
for(i=0;i<=n;i++)
{
mark[i]=i;
rank[i]=1;
num[i]=0;
}
return ;
}
int find(int x)
{
while(x!=mark[x])
x=mark[x];
return x;
}
void Union(int x,int y)
{
x=find(x);
y=find(y);
if(x==y)
return ;
if(rank[x]>rank[y])
{
mark[y]=x;
rank[x]+=rank[y];
}
else
{
mark[x]=y;
rank[y]+=rank[x];
}
return ;
}
int main()
{
int i;
int x,y;
int count1,count2;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
value();
while(m--)
{
scanf("%d%d",&x,&y);
num[x]++;
num[y]++;
Union(x,y);
}
count1=count2=0;
for(i=1;i<=n;i++)
{
if(mark[i]==i)
count1++;
if(num[i]%2==0)
count2++;
}
if(count1==1&&count2==n)
printf("1\n");
else
printf("0\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: