Python Networkx检测循环/循环

时间:2016-02-28 13:47:09

标签: python loops networkx

给出以下示例:

是否有可能检测到网络中的循环(I1, I2,I3, C6, C7, I5)

我尝试过:simple_cycles→它适用于3个节点,但不超过3个节点。

我需要检测所有节点的圆圈和"输入"节点("I1")和"输出" ("I3")

2 个答案:

答案 0 :(得分:3)

我重新创建了你的图表:

import networkx as nx

g = nx.DiGraph([('P', 'I0'), ('I0', 'I1'), ('I1', 'I2'),
                ('I2', 'I3'), ('I1', 'I5'), ('I5', 'C7'),
                ('C7', 'C6'), ('C6', 'I3'), ('I3', 'C9')])

您正在搜索简单的周期,但上图中没有:

>>> list(nx.simple_cycles(g))
[]

所以你必须在无向图中搜索周期。您必须将图形转换为无向图。对于无向图,cycle_basis函数就是您所需要的:

>>> nx.cycle_basis(g.to_undirected())
[['I5', 'C7', 'C6', 'I3', 'I2', 'I1']]

答案 1 :(得分:0)

是的,如果你使用方法nx.simple_cycles(G),你将把图中的循环作为一组循环中的节点(我已经对它进行了解释)。有关详细信息,请查看this