find_cycle#

find_cycle(G, source=None, orientation=None)[源代码]#

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

循环是指示循环路径的边的列表。定向边缘的方向由 orientation .

参数
G图表

有向/无向图/多重图。

source节点,节点列表

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

orientation无|‘原始’|‘反向’|‘忽略’(默认为无)

对于有向图和有向多重图,边的遍历不需要考虑边的原始方向。当设置为“反转”时,每条边都以相反的方向遍历。当设置为‘忽略’时,每条边都被视为无方向。当设置为‘原始’时,每条边都被视为定向的。在所有三种情况下,生成的边元组都会添加最后一个条目,以指示遍历该边的方向。如果方向为None,则屈服边没有指示方向。这一方向受到尊重,但没有得到报道。

返回
edges有向边

指示循环所采用的路径的有向边列表。如果未找到周期,则会引发异常。对于图,边的形式为 (u, v) 哪里 uv 是由遍历确定的边的尾部和头部。对于多重图,边的形式为 (u, v, key) ,在哪里 key 是边缘的关键。当图形被定向时,则 uv 始终按实际有向边的顺序排列。如果方向不是无,则扩展边缘元组以包括该边缘上的遍历方向(向前或向后)。

加薪
NetworkXNoCycle

如果没有找到循环。

参见

simple_cycles

实例

在这个例子中,我们构造了一个DAG,在第一次调用中发现没有定向循环,因此引发了一个异常。在第二个调用中,我们忽略了边缘方向,发现存在一个无向循环。注意,第二个调用在有效地遍历无向图时找到了一个有向循环,因此,我们找到了一个“无向循环”。这意味着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')]