Python Networkx 检测循环/圆圈

问题描述 投票:0回答:2

给出以下示例:

是否有可能检测网络中的环路

(I1, I2,I3, C6, C7, I5)

我尝试过:

simple_cycles
→ 它可以在 3 个节点上正常工作,但不能在超过 3 个节点上工作。

我需要检测包含所有节点的圆以及“输入”节点

("I1")
和“输出”
("I3")

python loops networkx
2个回答
21
投票

我重新创建了你的图表:

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']]

-2
投票

是的,如果您使用方法

nx.simple_cycles(G)
,您将得到图中的循环作为循环中的一组节点(正如我所理解的那样)。欲了解更多信息,请查看this

© www.soinside.com 2019 - 2024. All rights reserved.