all_pairs_dijkstra#

all_pairs_dijkstra(G, cutoff=None, weight='weight')[source]#

查找所有节点之间的最短加权路径和长度。

Parameters:
GNetworkX 图
cutoff整数或浮点数, 可选

搜索停止的长度(边权重的总和)。 如果提供了 cutoff,则仅返回总权重 <= cutoff 的路径。

weight字符串或函数

如果这是一个字符串,则将通过具有此键的边属性访问边权重(即,连接 uv 的边的权重将是 G.edge[u][v][weight] )。如果没有这样的边属性存在,则假定边的权重为 1。

如果这是一个函数,则边的权重是该函数返回的值。该函数必须接受三个位置参数:一条边的两个端点和该边的边属性字典。该函数必须返回一个数字或 None 以表示隐藏的边。

Yields:
(node, (distance, path))(节点对象, (字典, 字典))

每个源节点有两个关联的字典。第一个按目标键控距离,第二个按目标键控路径。 (参见 single_source_dijkstra 的源/目标节点术语。) 如果需要,可以对此函数应用 dict() 以创建一个按源节点键控到两个字典的字典。

Notes

边权重属性必须是数值。 距离计算为遍历的加权边之和。

生成的字典仅包含可达节点的键。

Examples

>>> G = nx.path_graph(5)
>>> len_path = dict(nx.all_pairs_dijkstra(G))
>>> len_path[3][0][1]
2
>>> for node in [0, 1, 2, 3, 4]:
...     print(f"3 - {node}: {len_path[3][0][node]}")
3 - 0: 3
3 - 1: 2
3 - 2: 1
3 - 3: 0
3 - 4: 1
>>> len_path[3][1][1]
[3, 2, 1]
>>> for n, (dist, path) in nx.all_pairs_dijkstra(G):
...     print(path[1])
[0, 1]
[1]
[2, 1]
[3, 2, 1]
[4, 3, 2, 1]

Additional backends implement this function

parallelParallel backend for NetworkX algorithms

The parallel implementation first divides the nodes into chunks and then creates a generator to lazily compute shortest paths and lengths for each node_chunk, and then employs joblib’s Parallel function to execute these computations in parallel across all available CPU cores.

Additional parameters:
get_chunksstr, function (default = “chunks”)

A function that takes in an iterable of all the nodes as input and returns an iterable node_chunks. The default chunking is done by slicing the G.nodes into n chunks, where n is the number of CPU cores.

[Source]