python-查找图上所有边的路径
作者:互联网
我试图在覆盖所有边缘的图形上获取路径,并且只遍历它们一次.
这意味着将只有两个“终点”点-附加的节点数为奇数.这些端点要么具有一个连接边缘,要么是回路的一部分,并具有3个连接.
因此,在下面的简单情况下,我需要以1-2-3-4-5(或5-4-3-2-1)的顺序遍历节点:
在下面更复杂的情况下,路径将是1-2-3-4-2(或1-2-4-3-2):
下面也是一个有效的图形,带有2个端点:1-2-4-3-2-5
我试图找到一种解决此问题的算法名称,并认为这是“中国邮递员问题”,但是基于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).
还有一个实现此功能的networkx库的未合并提取请求:https://github.com/networkx/networkx/pull/1878
源易于使用-https://raw.githubusercontent.com/humberto-ortiz/networkx/eulerpath/networkx/algorithms/euler.py
对于networkx 1.11,必须将.edge替换为.edge_iter
标签:networkx,graph-theory,python,algorithm 来源: https://codeday.me/bug/20191111/2021146.html