当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX goldberg_radzik用法及代码示例


本文简要介绍 networkx.algorithms.shortest_paths.weighted.goldberg_radzik 的用法。

用法:

goldberg_radzik(G, source, weight='weight')

计算加权图中最短路径的最短路径长度和前导。

该算法的运行时间为 ,其中 是节点数, 是边数。它比 Dijkstra 慢,但可以处理负边权重。

参数

GNetworkX 图

该算法适用于所有类型的图,包括有向图和多重图。

source: node label

路径的起始节点

weight字符串或函数

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

如果这是一个函数,则边的权重是函数返回的值。该函数必须准确地接受三个位置参数:一条边的两个端点和该边的边属性字典。该函数必须返回一个数字。

返回

pred, dist字典

将节点键控的两个字典分别返回到路径中的前任和到源的距离。

抛出

NodeNotFound

如果 source 不在 G 中。

NetworkXUnbounded

如果 (di) 图包含负 (di) 循环,则算法会引发异常以指示存在负 (di) 循环。注意:无向图中的任何负权边都是负循环。

注意

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

返回的字典仅具有可从源访问的节点的键。

在(di)图不连通的情况下,如果不包含源的组件包含负(di)循环,则不会被检测到。

例子

>>> G = nx.path_graph(5, create_using=nx.DiGraph())
>>> pred, dist = nx.goldberg_radzik(G, 0)
>>> sorted(pred.items())
[(0, None), (1, 0), (2, 1), (3, 2), (4, 3)]
>>> sorted(dist.items())
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
>>> G = nx.cycle_graph(5, create_using=nx.DiGraph())
>>> G[1][2]["weight"] = -7
>>> nx.goldberg_radzik(G, 0)
Traceback (most recent call last):
    ...
networkx.exception.NetworkXUnbounded: Negative cycle detected.

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.shortest_paths.weighted.goldberg_radzik。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。