查找NetworkX中两个节点之间的所有最短路径

时间:2020-10-22 09:44:33

标签: networkx graph-theory shortest-path

假设我有一个具有N个节点的BA网络,其中每个节点至少有2条边。网络未加权。我正在尝试查找网络中所有节点的每个节点ij之间的所有最短路径。但是,如果节点ij之间的最短路径不止1条,那么我就需要i j之间的每条最短路径。

因此,如果可以通过使用路径[0,1,2], [0,3,4,2], [0,3,4,5,2], [0,4,5,2][0,3,2]从0到达节点2,我需要一个列表,上面写着[[0,1,2], [0,3,2]]

执行此操作的唯一方法是计算从i到j的每个路径并获得最小的冗长列表吗?能否以更有效的方式来建立?

编辑:显然有一个名为all_shortest_paths的寻路方法。我会尝试一下,看看它是否有效。

2 个答案:

答案 0 :(得分:1)

您可以为此使用nx.nx.all_shortest_paths

all_shortest_paths(G,来源,目标,重量=无,方法='dijkstra')

允许您指定源节点和目标节点。这是一个简单的示例:

plt.figure(figsize=(6,4))
G = nx.from_edgelist([[1,2],[2,3],[7,8],[3,8],[1,8], [2,9],[9,0],[0,7]])
nx.draw(G, with_labels=True, node_color='lightgreen')

enter image description here

list(nx.all_shortest_paths(G, 2, 8))
# [[2, 1, 8], [2, 3, 8]]

答案 1 :(得分:0)

Floyd Warshall算法就是您所需要的

相关问题