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。

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

行和列按nodelist中的节点排序。如果nodelist为None,则按G.nodes生成排序。Nodelist应包含G中的所有节点。

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

对应边权重的边数据键。

Returns:
distance2D numpy.ndarray

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

Raises:
NetworkXError

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

Notes

Floyd算法适用于在密集图或具有负权重的图中查找最短路径,当Dijkstra算法失败时。如果存在负环,该算法仍可能失败。其运行时间为:math:O(n^3),运行空间为:math:O(n^2)

Examples

>>> 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.]])

Additional backends implement this function

graphblas : OpenMP-enabled sparse linear algebra backend.