all_pairs_dijkstra#
- all_pairs_dijkstra(G, cutoff=None, weight='weight')[source]#
查找所有节点之间的最短加权路径和长度。
- Parameters:
- GNetworkX 图
- cutoff整数或浮点数, 可选
搜索停止的长度(边权重的总和)。 如果提供了 cutoff,则仅返回总权重 <= cutoff 的路径。
- weight字符串或函数
如果这是一个字符串,则将通过具有此键的边属性访问边权重(即,连接
u
到v
的边的权重将是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’sParallel
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 theG.nodes
inton
chunks, wheren
is the number of CPU cores.
[Source]