遍历覆盖所有节点的networkx图

问题描述 投票:0回答:1

我想遍历给定起始节点的无向 networkx 图中的所有节点。只要找到一条重复节点很少的最佳路径,访问节点的顺序就不是问题。

示例:

G = nx.Graph(4)
G.add_edges_from([(1,2),(2,3),(2,4)])

返回的最优答案:

[1,2,3,2,4] # for start node 1
[3,2,1,2,4] # or [3,2,4,2,1] for start node 3

提前致谢

python-3.x networkx graph-theory
1个回答
0
投票

最佳答案,即没有重新访问顶点,也没有多次遍历边的情况,称为旅行商问题。这是一个非常难的问题!

由于您允许重新访问顶点和多边遍历,因此可以使用各种近似值在合理的处理时间内获得此类答案。

总体思路是找到最小生成树并在树中进行深度优先搜索,必要时允许回溯 - 到达树的叶子。

如果没有有关您需要解决的特定问题的更多详细信息,我无法更具体。您可能应该编辑您的问题以提供一些详细信息。

但是,您应该考虑的一件事是:您的图表是“指标”吗?也就是说,对于每个可能的顶点三元组 ( A,B,C ),采用两个节点之间的边总是比通过第三个节点更便宜。如果是,那么您可以使用 TSP 的度量近似解。请注意,大多数模拟现实世界问题的图表都是度量的,并且近似值足以满足大多数用途。在您的情况下,边似乎没有关联的权重,因此假设所有边都具有相同的权重。这意味着您的图表确实是度量的,您应该探索 TSP 的近似解决方案。您可以从以下内容开始:http://www.cs.tufts.edu/~cowen/advanced/2002/adv-lect3.pdf

© www.soinside.com 2019 - 2024. All rights reserved.