find_negative_cycle#

find_negative_cycle(G, source, weight='weight')[source]#

如果存在,则返回总权重为负的环。

使用 Bellman-Ford 算法寻找最短路径。如果存在负权环,该算法会停止。此函数在此基础上继续,并返回找到的负权环。

该环由按顺序排列的节点列表组成。最后一个节点等于第一个节点以构成环。您可以在原始图中查找边的权重。对于多重图,相关边是节点对(2-元组)之间权重最小的边。

如果图中不存在负权环,则会引发 NetworkXError。

参数:
GNetworkX 图
source: 节点标签

寻找负权环将从该节点开始。

weight字符串或函数

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

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

返回:
cycle列表

找到的环中按顺序排列的节点列表。最后一个节点等于第一个节点以表示一个环。

引发:
NetworkXError

如果未找到负权环。

示例

>>> G = nx.DiGraph()
>>> G.add_weighted_edges_from(
...     [(0, 1, 2), (1, 2, 2), (2, 0, 1), (1, 4, 2), (4, 0, -5)]
... )
>>> nx.find_negative_cycle(G, 0)
[4, 0, 1, 4]