这是一道裸是否存在欧拉回路判断的题;
对于无向图的欧拉回路的判断要有这两个条件要把握
1,.这个图是连通的。
2.这个图中每个顶点的度数都是偶数(如果是有想图就是出度等于入度)。
对于连通性的判断大多要用到并查集。
下面是我的代码:
#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <memory.h>
#define maxn 1001
using namespace std;
int parent[maxn],degree[maxn],sum,M,N;
int Find(int x)
{
return x==parent[x]?x:parent[x]=Find(parent[x]);
}
void Union(int R1,int R2)
{
int a=Find(R1),b=Find(R2);
if(a!=b){parent[a]=b;sum++;};
}
int main()
{
// freopen("in.txt","r",stdin);
int x,y;
while(~scanf("%d",&N)&&N)
{
scanf("%d",&M);
sum=0;
for(int i=1;i<=N;i++)parent[i]=i;
memset(degree,0,sizeof degree);
for(int i=1;i<=M;i++)
{
scanf("%d%d",&x,&y);
Union(x,y);
degree[x]++;degree[y]++;
}
bool flag=1;
for(int i=1;i<=N;i++)
{
if(degree[i]%2)
{
flag=false;break;
}
}
flag=flag&&(N==sum+1);
printf("%d\n",flag?1:0);
}
return 0;
}