【发布时间】:2016-10-04 16:11:47
【问题描述】:
我需要一种算法来在有向图中查找所有并行路径的集合。这是我用于测试的示例的可视化表示。
这是我在 Python 中使用 networkx 的示例代码:
import networkx as nx
G = nx.MultiDiGraph()
# relevant part of graph to my question
G.add_edges_from([(1,2),(2,3),(3,4),(2,5),(5,6),(6,4),(4,7)])
# subordinate part of graph to my question
G.add_edges_from([(7,8),(8,9),(7,10),(10,11),(11,13),(11,12),(12,14)])
pp = get_parallel_paths(G) # -> the function I'm looking for
# pp should contain:
# pp = [[[(2,3),(3,4)],[(2,5),(5,6),(6,4)]],[...]]
# the procedure should list all sets of parallel paths
# hence the [...] indicates a possible other set of parallel paths (not in example)
这是我正在寻找的函数“get_parallel_paths”。它不必在 Python 中:非常欢迎任何可以帮助我实现的算法的指针。
【问题讨论】:
-
我已经改变了我的问题:这是我正在寻找的平行路径(每个连续的一个或多个边)。
-
进一步澄清:如果在您的示例中,
9和14是同一个顶点,那么[7,10,11,12,9]和[7,8,9]是否会被视为“平行”?也就是说,分支会中断您的并行定义吗? -
@Kittsil 考虑不可能有分支,因此如果 9 和 14 是同一个节点,那么您提到的路径不被视为并行路径。顺便说一句:学科是电力网络,并添加并行路径以增加网络部分的电力容量。分支不应该发生在这些并行路径上。
-
“平行”这个词在这里有什么意思吗,还是你只是在寻找两个顶点之间的路径集?
-
@Kundor 我不使用数学意义上的“并行”,如果那是你所指的。事实上,我使用像here 这样的“平行”,但我的案例没有边缘,而是有路径(边缘的连续性)。
标签: python algorithm networkx directed-graph