给你一幅无向图,让你判断是不是圆。。
成圆条件有两个。
第一:每一个点的入度只能为2.
第二:所有点属于一个集合。
上代码;
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
#include <iostream>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <time.h>
#include <stdlib.h>
int p[26];
int v[26];
int find(int x)
{
if(p[x]!=x)
p[x]=find(p[x]);
return p[x];
}
int hebing(int x,int y)
{
return p[x]=y;
}
int main()
{
int n,m,i,j,a,b;
while(cin>>n>>m)
{
memset(v,0,sizeof(v));
for(i=1; i<=25; i++)
p[i]=i;
while(m--)
{
cin>>a>>b;
v[a]++; //入度
v[b]++;
a=find(a);
b=find(b);
if(a!=b)
hebing(a,b); //合并、
}
for(i=1; i<=n; i++)
{
if(p[1]!=p[i]|| v[i]!=2)
break;
}
// cout<<i<<endl;
if(i==n+1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
原文:http://blog.csdn.net/sky_miange/article/details/44885731