python找出图中所有闭合环_求图中的所有闭合环

NetworkX是一个流行的Python包,用于处理许多科学Python发行版中包含的图形。它包括一些计算图圈的算法。尤其是,^{}会回答你的问题。在

这种方法的一个警告是必须将图转换为有向图。这意味着无向图的每条边在有向版本中都将成为一个循环。(无向边变为两个有向边。)您可以简单地过滤输出,使其仅包含长度为3或更大的循环。在

下面是一个使用链接到的图形的示例:from networkx import Graph, DiGraph, simple_cycles

# construct a graph using a dict: {node:[connected_nodes]}

G = Graph(

{'A':['B','G','H'],

'B':['A','C','D'],

'C':['B','D','E'],

'D':['B','C','E','F','G', 'H'],

'E':['C','D','F'],

'F':['D','E','G'],

'G':['A','D','F','H'],

'H':['A','D','G'],

}

)

# optional: draw the graph for verification

#labels = dict(zip(G.nodes(),G.nodes()))

#networkx.draw_networkx(G,labels=labels)

# simple_cycles only accepts DiGraphs. convert G to a bi-directional

# digraph. note that every edge of G will be included in this list!

DG = DiGraph(G)

list(simple_cycles(DG))

(截断的)输出是:

^{pr2}$

如果您希望自己不使用NetworkX来实现这一点,simple_cycles()则使用Johnson的算法。(参见Donald B.Johnson,查找有向图的所有基本回路,暹罗J.Comput.,4(1),77–84)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值