Python 寻找图中的所有闭环
我正在尝试编写一个Python代码,它将识别任意图中的所有闭环 所谓闭环,我指的是一个循环,除了循环开始的顶点外,它不会访问任何顶点超过一次(在这种情况下,Python 寻找图中的所有闭环,python,math,graph,counting,Python,Math,Graph,Counting,我正在尝试编写一个Python代码,它将识别任意图中的所有闭环 所谓闭环,我指的是一个循环,除了循环开始的顶点外,它不会访问任何顶点超过一次(在这种情况下,DGHD就是一个例子,就像BCDB,或者BCEFDB,等等) 我试着用矩阵乘法来实现这一点,把图写成一个矩阵,其中有两个垂直点连接的是1,没有连接的是0,然后把它们放到n次方,不过这也会考虑到非闭环 此人似乎也做过同样的工作,但还是设法解决了: 我想知道有没有什么建议,该往哪个方向走 是一个流行的Python包,用于处理许多scient
DGHD
就是一个例子,就像BCDB
,或者BCEFDB
,等等)
我试着用矩阵乘法来实现这一点,把图写成一个矩阵,其中有两个垂直点连接的是1,没有连接的是0,然后把它们放到n次方,不过这也会考虑到非闭环
此人似乎也做过同样的工作,但还是设法解决了:
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))
(截断的)输出为:
[['B', 'D', 'H', 'G', 'F', 'E', 'C'],
['B', 'D', 'H', 'G', 'A'],
['B', 'D', 'H', 'A', 'G', 'F', 'E', 'C'],
['B', 'D', 'H', 'A'],
['B', 'D', 'F', 'G', 'H', 'A'],
['B', 'D', 'F', 'G', 'A'],
['B', 'D', 'F', 'E', 'C'],
['B', 'D', 'G', 'F', 'E', 'C'],
...
]
如果您希望自己实现此功能而不使用NetworkX
simple\u cycles()
则使用约翰逊算法。(参见Donald B.Johnson,《寻找有向图的所有基本回路》,暹罗计算机杂志,4(1),77–84)天哪,我忘了这个问题。太棒了。我能够使用这个软件包,得到我需要的东西!非常感谢你的帮助。