【发布时间】:2021-12-08 02:48:49
【问题描述】:
我有一个加权无向图(~90 个节点,~120 个边),我想在其中找到节点子集的所有组合之间的最短路径,存储为列表“endPoints”。最短路径受以下几个标准的约束:
- 对于 endPoints 中 (s)source 和 (d)estination 节点的每种组合,图中都有一组不同的中间节点,我需要最短路径来包含。
- 对于 s 和 d 的每种组合,都有一组不同的中间节点,我需要最短路径来排除。
- 对于 s 和 d 的每个组合,可以选择遍历图中未在 1) 或 2) 中指定的任何其他节点。
例如对于包含节点 A-E 的图,我想找到 AB、AC、AD、AE、BC、BD、BE、CD、CE、DE 之间的最短路径。对于 AE,路径必须经过 B 和 C,但不能经过 D;对于 BD,路径必须经过 A,不得经过 C,可以选择经过 E,等等。
我认为使用的方法是在图中找到每个 s 和 d 之间的所有简单路径,然后对它们进行迭代,排除那些不符合标准 1) 和 2) 的路径,然后找到每个路径的最短路径剩余的 s 和 d 组合使用 nx.shortest_path。
查找所有简单路径会返回每个 s-d 对的生成器对象,我不确定如何迭代这些 s,d 生成器以应用标准 1) 和 2)
谁能帮助下一步(或建议替代方法)吗?
from itertools import combinations
allPaths = []
for s, d in combinations(endPoints, 2):
allPaths.append((s, d, nx.all_simple_paths(G, s, d, cutoff=999)))
allPaths
返回
[('ep01',
'ep02',
<generator object _all_simple_paths_graph at 0x0000025656C91BC8>),
('ep01',
'ep03',
<generator object _all_simple_paths_graph at 0x0000025656C91C48>),
etc.
【问题讨论】:
标签: python networkx graph-databases