标签:
zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。
规定,所有的边都只能画一次,不能重复画。
2 4 3 1 2 1 3 1 4 4 5 1 2 2 3 1 3 1 4 3 4
No Yes
无向图是否具有欧拉通路或回路的判定:
欧拉通路:图连通;图中只有0个或2个度为奇数的节点
欧拉回路:图连通;图中所有节点度均为偶数
#include<stdio.h>
#include<string.h>
int n;
int per[1050];
int num[1050];
void init()
{
for(int i=1;i<=n;++i)
{
per[i]=i;
}
}
int find(int x)
{
int r=x;
while(r!=per[r])
{
r=per[r];
}
int i=x,j;
while(i!=r)
{
j=per[i];
per[i]=r;
i=j;
}
return r;
}
void join(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
per[fx]=fy;
}
}
int main()
{
int i, j;
int m;
int T;
int x, y;
scanf("%d",&T);
while(T--)
{
memset(num,0,sizeof(num));
scanf("%d%d",&n,&m);
if(n==1)
{
printf("Yes\n");
continue;
}
init();
for(i=0;i<m;++i)
{
scanf("%d%d",&x,&y);
num[x]++;num[y]++;
join(x,y);
}
bool flag=0;
int cnt1=0,cnt2=0;
for(i=1;i<=n;++i)
{
if(num[i]&1) cnt1++; //奇数度有几个
if(per[i]==i) cnt2++; //有几个根节点
}
if((cnt1==0||cnt1==2)&&cnt2==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/yuzhiwei1995/article/details/47447409