这道题,我用的是kruskal里的东西来做的,很遗憾的是当时或许太激动了,把m错写成n了,找了好久都没找到错误在那,最后提交4次才过,可惜可惜啊!
#include<stdio.h>
typedef struct
{
int x;
int y;
}xx;
xx node[30];
int pre2[30];
int find(int x)
{
while(x!=pre2[x])
x=pre2[x];
return x;
}
int unio(int n)
{
int i,a,b,sum=0;
for(i=0;i<n;i++)
{
a=find(node[i].x);
b=find(node[i].y);
if(a!=b)
{
sum++;
pre2[b]=a;
}
else
{
sum++;
break;
}
}
return sum;
}
int main()
{
int n,m,i,pre1[30],p,num;
while(scanf("%d%d",&n,&m)!=EOF)
{
p=1;
num=0;
for(i=1;i<=n;i++)
{
pre1[i]=0;
pre2[i]=i;
}
for(i=0;i<m;i++)
{
scanf("%d%d",&node[i].x,&node[i].y);
pre1[node[i].x]++;
pre1[node[i].y]++;
}
if(n!=m||n<3)
p=0;
else
{
for(i=1;i<=n;i++)
if(pre1[i]!=2)
{
p=0;
break;
}
if(p)
{
num=unio(n);
if(num!=n)
p=0;
}
}
if(p)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}