admin 管理员组

文章数量: 1184232

欧拉回路python

  • 定义

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

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

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

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

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

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

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

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

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

def isEuler():allVisited = Truefor e in visited:if e == 0:allVisited = Falseif allVisited:if queue[0] == queue[len(queue) - 1]:return 1else:return 2return 0def 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 = TrueprintPath(flag)for i in range(len(eulerEdges)):if visited[i]:continuevisited[i] = 1if eulerEdges[i][0] == x:dfs(eulerEdges[i][1])queue.pop()visited[i] = 0elif eulerEdges[i][1] == x:dfs(eulerEdges[i][0])queue.pop()visited[i] = 0eulerEdges = [(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 = 1dfs(start)
if not eulerFlag:print("不是欧拉回路或欧拉道路")

本文标签: 欧拉回路python