欧拉图与半欧拉图的判断
首先我们看下欧拉图的定义:
无向图是否具有欧拉通路或回路的判定:
欧拉通路:无向图G是欧拉图当且仅当G是连通图且没有奇度顶点。
欧拉回路:无向图G是半欧拉图当且仅当G是连通的且恰好有两个奇度顶点。
大家都知道欧拉图与半欧拉图在图论中占有重大地位,那么如何用Python来实现呢?
算法核心:
1.首先我们将所给图片中边与点的关系转化为矩阵。
2.判断每行的数字之和,因为欧拉图的每行数字之和均为偶数,半欧拉图的每行数字之和只有两个奇数,其他均为偶数。
废话不多说,直接上代码。
import numpy as np
m=int(input("请输入边数:"))#给定边数
n=int(input("请输入顶点数:"))#给定顶点数
N=[]#创建一个空矩阵
count=0#计数
for i in range(n):
N.append(list(map(int,input().split())))#将转换后的数添加到列表
N=np.array(N)#将列表转化为矩阵
for i in range(n):
sum=0#因为要判断每行的数字之和,所以每次都要初始化为0
for j in range(m):#将每行的数字之和加起来
sum+=N[i][j]
if (sum%2==0):#判断每行的数之和是否为偶数
count+=0
else:#判断每行的数之和是否为奇数
count+=1
if (count==0):#每行数之和均为偶数
print("这是一个欧拉图!")
elif (count==2):#每行数之和只有两个为奇数,其余皆为偶数
print("这是一个半欧拉图!")
else:#其他类型
print("这啥都不是!")
print(N)
输出结果:
请输入边数:6
请输入顶点数:4
1 1 0 0 0 1
0 1 1 0 1 0
0 0 1 1 0 1
1 0 0 1 1 0
这啥都不是!
[[1 1 0 0 0 1]
[0 1 1 0 1 0]
[0 0 1 1 0 1]
[1 0 0 1 1 0]]
以下为几个欧拉图与半欧拉图的判断例子,大家可以自己尝试一下