给出以下示例:
是否有可能检测到网络中的循环(I1, I2,I3, C6, C7, I5)
?
我尝试过:simple_cycles
→它适用于3个节点,但不超过3个节点。
我需要检测所有节点的圆圈和"输入"节点("I1")
和"输出" ("I3")
。
答案 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。