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


Python NetworkX find_cycle用法及代码示例


本文简要介绍 networkx.algorithms.cycles.find_cycle 的用法。

用法:

find_cycle(G, source=None, orientation=None)

返回通过深度优先遍历找到的循环。

循环是指示循环路径的边列表。有向边的方向由 orientation 控制。

参数

G图形

有向/无向图/多重图。

source节点,节点列表

遍历开始的节点。如果没有,则任意重复选择一个源,直到搜索到图中每个节点的所有边。

orientation无 | ‘original’ | ‘reverse’ | ‘ignore’(默认值:无)

对于有向图和有向多重图,边遍历不需要尊重边的原始方向。当设置为‘reverse’ 时,每条边都以相反的方向遍历。当设置为‘ignore’ 时,每条边都被视为无向。当设置为‘original’ 时,每条边都被视为有向边。在所有三种情况下,产生的边元组都会添加最后一个条目来指示该边被遍历的方向。如果方向为无,则屈服边没有指示方向。方向受到尊重,但未报告。

返回

edges有向边

有向边列表,指示循环所采用的路径。如果没有找到循环,则会引发异常。对于图,边的形式为(u, v),其中uv 是由遍历确定的边的尾部和头部。对于多重图,边的形式为 (u, v, key) ,其中 key 是边的键。当图有向时,uv 始终按实际有向边的顺序排列。如果orientation不是None,则边元组将扩展以包括该边上的遍历方向(‘forward’或‘reverse’)。

抛出

NetworkXNoCycle

如果没有找到循环。

例子

在此示例中,我们构造了一个 DAG,并在第一次调用中发现没有定向循环,因此引发了异常。在第二次调用中,我们忽略了边方向,发现存在一个无向循环。请注意,第二个调用在有效遍历无向图的同时找到了有向环,因此我们找到了“undirected cycle”。这意味着这种 DAG 结构不会形成有向树(也称为多树)。

>>> G = nx.DiGraph([(0, 1), (0, 2), (1, 2)])
>>> nx.find_cycle(G, orientation="original")
Traceback (most recent call last):
    ...
networkx.exception.NetworkXNoCycle: No cycle found.
>>> list(nx.find_cycle(G, orientation="ignore"))
[(0, 1, 'forward'), (1, 2, 'forward'), (0, 2, 'reverse')]

相关用法


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