欧拉回路python

  • 定义

    • 如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。
    • 如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。 [1]
    • 具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。
  • 判断

    A.判断欧拉通路是否存在的方法

    有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。

    无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。

    B.判断欧拉回路是否存在的方法

    有向图:图连通,所有的顶点出度=入度。

    无向图:图连通,所有顶点都是偶数度。

python代码参考:欧拉回路,欧拉道路,七桥问题,Python代码实现_曹向前的博客-CSDN博客

以七桥问题为例,选择一个奇数点开始,使用dfs思想,对每个可能的路深度遍历

def isEuler():
    allVisited = True
    for e in visited:
        if e == 0:
            allVisited = False
    if allVisited:
        if queue[0] == queue[len(queue) - 1]:
            return 1
        else:
            return 2
    return 0

def printPath(flag):
    if flag == 1:
        print("是欧拉回路:", end="")
    else:
        print("是欧拉道路:", end="")
    for i in range(len(queue)):
        if i < len(queue) - 1:
            print(queue[i], "-> ", end="")
        else:
            print(queue[i])

def dfs(x):
    queue.append(x)
    flag = isEuler()
    if flag > 0:
        eulerFlag = True
        printPath(flag)
    for i in range(len(eulerEdges)):
        if visited[i]:
            continue
        visited[i] = 1
        if eulerEdges[i][0] == x:
            dfs(eulerEdges[i][1])
            queue.pop()
            visited[i] = 0
        elif eulerEdges[i][1] == x:
            dfs(eulerEdges[i][0])
            queue.pop()
            visited[i] = 0
    
    
eulerEdges = [
    (1, 2),
    (1, 2),
    (1, 0),
    (2, 0),
    (2, 3),
    (2, 3),
    (3, 0)
]      
queue = []
visited = [0 for _ in range(len(eulerEdges))]
eulerFlag = False
start = 1

dfs(start)
if not eulerFlag:
    print("不是欧拉回路或欧拉道路")

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值