对于有欧拉回路的图,首先是要连通,并且有以下条件:
1、无向图存在欧拉回路条件:每个点入度都为偶数
2、无向图存在欧拉路条件:只有两个点入度为奇数或每个点入度都为偶数
3、有向图存在欧拉回路条件:每个点入度都等于出度
4、有向图存在欧拉路条件:只存在这样两个点:一个点入度等于出度+1,另一个点入度=出度-1,其他每个点入度都等于出度,或者每个点入度都等于出度。
对于判断连通,有2种方法:
1、利用并查集。代码转载的别人的。。。如下:
#include<stdio.h>
int map[1005];
int n,m;
int find(int i)
{
return map[i]==i?i:find(map[i]);
}
void init()
{
for(int i=0;i<n;i++)
map[i]=i;
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
if(n==0) break;
init();
int a,b;
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
a--;b--;
map[find(a)]=map[find(b)];
}
int cnt=0;
for(int i=0;i<n;i++)
{
if(map[i]==i)
cnt++;
}
if(cnt==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
2、利用dfs,从任一点出发,把能到的所有点标记,最后遍历所有点看有没有没有标记的点,如果有,则无法连通。