ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 16:57:56  阅读:951  来源: 互联网

标签:networkx graph-theory python algorithm


我试图在覆盖所有边缘的图形上获取路径,并且只遍历它们一次.
这意味着将只有两个“终点”点-附加的节点数为奇数.这些端点要么具有一个连接边缘,要么是回路的一部分,并具有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

我试图找到一种解决此问题的算法名称,并认为这是“中国邮递员问题”,但是基于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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有