floyd_warshall_numpy#

floyd_warshall_numpy(G, nodelist=None, weight='weight')[source]#

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

此算法利用图的矩阵表示来查找最短路径,非常适用于需要查找所有节点对最短路径长度的密集图。结果将返回一个 NumPy 数组 distance[i, j],其中 i 和 j 是 nodelist 中两个节点的索引。distance[i, j] 表示从 i 到 j 的最短路径长度。如果不存在路径,则距离为 Inf。

参数:
GNetworkX 图
nodelist列表,可选 (默认=G.nodes)

行和列的顺序由 nodelist 中的节点确定。如果 nodelist 为 None,则顺序由 G.nodes 产生。nodelist 应包含 G 中的所有节点。

weight: 字符串,可选 (默认=’weight’)

对应于边权重的边数据键。

返回值:
distance二维 numpy.ndarray

一个表示节点间最短路径距离的 numpy 数组。如果两个节点之间没有路径,则值为 Inf。

引发:
NetworkXError

如果 nodelist 不是 G 中的节点列表。

说明

当 Dijkstra 算法失效时,Floyd 算法适用于在密集图或带有负权重的图中查找最短路径。如果存在负权环,此算法仍然可能失效。它的运行时间为 \(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)]
... )
>>> nx.floyd_warshall_numpy(G)
array([[ 0.,  5.,  7.,  4.],
       [inf,  0.,  2., -1.],
       [inf, inf,  0., -3.],
       [inf, inf,  8.,  0.]])
----

其他后端实现了此函数

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