Networkx-cycle

来源:互联网 发布:黑客学什么编程语言 编辑:程序博客网 时间:2024/06/16 10:31

1.cycle_basis

cycle_basis 的函数原型:

cycle_basis(G, root=None)

需要传入两个参数


假设我们创建一个图

import networkx as nximport matplotlib.pyplot as pltG=nx.Graph()  # 创建一个无向图G.add_edges_from([(1,2),(2,3),(3,1),(2,4),(4,3),(3,1)]) # 构建边nx.draw_networkx(G,pos=nx.spring_layout(G))plt.show()  # 画图nx.cycle_basis(G,1)  # 计算 cycle basis

我们把这个图画出来,我们其实可以发现几个环,[1,2,3] ,[2,3,4],[1,2,3,4]

这里写图片描述

这里写图片描述

我们来看下这个实验结果,它得到的是两个环
少了一个[1,2,3,4]
这个是因为我们调用的这个API cycle_basis 决定的 因为它指的就是这个循环中的最小圈

一个网络周期的基础就是循环的最小的集合,网络中的任何循环都可以写成是基于每个周期基础 cycle basis 的总和。

但是这个函数只适用与无向图。



2. simple_cycles

simple_cycles 找到有向图中的基本回路。 注意是找有向图中的基本回路。

一个简单simple 的周期,或者说是一个基本的回路(elementary circuit)。如果两个回路有着不同的循环排列,那么这两个基本的回路是不同的。

现在我们来构建一个图之后我们来尝试一下使用simple_cycles() 这个函数

这个函数的函数原型是:

simple_cycles(G)

G=nx.DiGraph()G.add_edges_from([(1,2),(2,3),(3,2),(3,4),(4,2),(2,5),(5,6)])nx.draw_networkx(G,pos=nx.spring_layout(G))plt.show()

我们可以得到下面这个图

这里写图片描述

我们可以查看一下结果

这里写图片描述

在这里我们就不能使用我们的cycle_basis() 这个方法了,因为我们在这里构建的是有向图

在这里我们还引入了我们的nx.find_cycle(G)

它是通过深度优先遍历然后返回一个循环的边。得到的结果是边。





这里写图片描述

原创粉丝点击