HDU-1878-欧拉回路

HDU-1878-欧拉回路

http://acm.hdu.edu.cn/showproblem.php?pid=1878

图G的一个回路,若它恰通过G中每条边一次,则称该回路为欧拉回路

一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图

#include
#include
#include
int n,m;
int visit[1002],f[1002];
void init()
{
	int i;
	for(i=1;i<=n;i++)
	f[i]=i;
}
int find(int x)
{
	int r=x;
	while(f[r]!=r)
	r=f[r];
	f[x]=r;
	return r;
}
void Union(int x,int y)
{
	int fx,fy;
	fx=find(x);
	fy=find(y);
	if(fx!=fy)
	f[fx]=fy;
}
int main()
{
	int a,b,i;
	int ans,flag;
	while(scanf("%d",&n),n)
	{
		scanf("%d",&m);
		memset(visit,0,sizeof(visit));
		init();
		ans=0;
		while(m--)
		{
			scanf("%d %d",&a,&b);
			visit[a]++;
			visit[b]++;
			Union(a,b);
		}
		for(i=1;i<=n;i++)
		if(f[i]==i)
		ans++;
		if(ans==1)
		{
			flag=1;
			for(i=1;i<=n;i++)
			if(visit[i]%2==1)
			{
				flag=0;
				break;
			}
			if(flag==1)
			printf("1\n");
			else
		    printf("0\n");
		}
		else
		printf("0\n");
	}
	return 0;
}


你可能感兴趣的:(ACM_图论)