欧拉图与半欧拉图的判断

欧拉图与半欧拉图的判断

首先我们看下欧拉图的定义:
在这里插入图片描述

无向图是否具有欧拉通路或回路的判定:

欧拉通路:无向图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]]

以下为几个欧拉图与半欧拉图的判断例子,大家可以自己尝试一下
在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值