python - 查找图上所有边的路径

标签 python algorithm graph-theory networkx

我试图在覆盖所有边的图形上获取路径,并且只遍历它们一次。 这意味着只有两个“端”点——它们将有奇数个附加节点。这些端点要么有一个连接边,要么是环路的一部分并有 3 个连接。

所以在下面的简单情况下,我需要按 1-2-3-4-5(或 5-4-3-2-1)的顺序遍历节点:

simple

在更复杂的情况下,路径将是 1-2-3-4-2(或 1-2-4-3-2):

--graph

下面也是一个有效的图,有 2 个端点:1-2-4-3-2-5

complex

我试图找到解决此问题的算法名称,并认为这是“中国 postman 问题”,但基于 https://github.com/rkistner/chinese-postman/blob/master/postman.py 处的代码实现了此问题没有提供我预期的结果。

欧拉路径看起来几乎是所需要的,但是 networkx implementation仅适用于封闭(环路)网络。

我还看了一个 Hamiltonian Path - 并尝试了 networkx algorithm - 但不支持图形类型。

理想情况下,我想使用 Python 和 networkx 来实现它,可能有一个简单的解决方案已经是库的一部分,但我似乎找不到它。

最佳答案

您正在寻找 Eulerian Path恰好访问每条边一次。您可以使用 Fleury's algorithm生成路径。 Fleury的算法有O(E^2)的时间复杂度,如果需要更高效的算法检查Hierholzer's algorithm而是 O(E)

还有一个 unmerged pull request对于实现这个的 networkx 库。 source易于使用。

(对于 networkx 1.11,.edge 必须替换为 .edge_iter)。

关于python - 查找图上所有边的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714073/

相关文章:

algorithm - 与我已经证明的相比,有人可以为我提供更好的冒泡排序证明和场景吗

ruby - 我的选择排序算法有什么问题?

c++ - 为什么我们需要Prim算法中的优先级队列

algorithm - 使用 BFS 检测循环

python - 将 XML 目录与 Python 的 lxml 一起使用?

python - 为什么 pip (或 pipX)不适用于 Python3.4

python - Django Twitter OAuth 身份验证

python - 当两个不同的规则路径可以生成给定的输出时,snakemake 能否避免歧义?

algorithm - 我可以在循环双向链表中添加一个新的标题吗?

algorithm - 向图中添加新边并在 O(n) 中找到新的生成树