floyd_warshall#

floyd_warshall(G, weight='weight')[source]#

使用Floyd算法查找所有节点对的最短路径长度。

参数:
GNetworkX图
weight: 字符串, 可选 (默认为 'weight')

对应边权重的边数据键。

返回值:
distance字典

一个字典,以源节点和目标节点为键,存储节点间最短路径距离。

另请参阅

floyd_warshall_predecessor_and_distance
floyd_warshall_numpy
all_pairs_shortest_path
all_pairs_shortest_path_length

说明

Floyd算法适用于在密集图或Dijkstra算法失效的带有负权重的图中查找最短路径。如果存在负权环,此算法仍然可能失效。它的运行时间为 \(O(n^3)\),运行空间为 \(O(n^2)\)

示例

>>> G = nx.DiGraph()
>>> G.add_weighted_edges_from(
...     [(0, 1, 5), (1, 2, 2), (2, 3, -3), (1, 3, 10), (3, 2, 8)]
... )
>>> fw = nx.floyd_warshall(G, weight="weight")
>>> results = {a: dict(b) for a, b in fw.items()}
>>> print(results)
{0: {0: 0, 1: 5, 2: 7, 3: 4}, 1: {1: 0, 2: 2, 3: -1, 0: inf}, 2: {2: 0, 3: -3, 0: inf, 1: inf}, 3: {3: 0, 2: 8, 0: inf, 1: inf}}
----

其他后端实现了此函数

graphblas : 支持OpenMP的稀疏线性代数后端。