R中无向图的圈

R中无向图的圈,r,graph-theory,cycle,R,Graph Theory,Cycle,我有一个无向图,我想做的是检测有三个或更多节点的循环。在R中有这样的图书馆吗?如果没有,我可以实现一个简单的算法 test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5)) test好吧,这不会给出循环中的实际节点,但它会计算图中每个列组的循环,因此这是一个开始 library(igraph) test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5)) g <- graph.dat

我有一个无向图,我想做的是检测有三个或更多节点的循环。在R中有这样的图书馆吗?如果没有,我可以实现一个简单的算法

test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5))

test好吧,这不会给出循环中的实际节点,但它会计算图中每个列组的循环,因此这是一个开始

library(igraph)
test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5))
g <- graph.data.frame(test)

cycles <- t(sapply(3:dim(test)[1], function(x) {v=graph.motifs.no(g, size=x); c(x,v)}))
colnames(cycles) <- c("size","count")

     size count
[1,]    3     1
[2,]    4     0

它必须是
R
?在我的答案中添加了一个python解决方案。我更喜欢R,因为这是我的习惯,但之前已经用python做了一些工作,所以我很乐意尝试一下。感谢simple_循环的唯一问题是它适用于有向图。我的数据集是无方向的,它可能仍然可以工作。哦,对了,无方向<代码>简单循环()。以下是两个您可能会发现有用的讨论:和。看起来你可以很聪明地使用DFS,这可能就足够了。
import networkx as nx
from networkx.algorithms.cycles import simple_cycles
g = nx.DiGraph()
g.add_edge(1,2)
g.add_edge(2,3)
g.add_edge(3,4)
g.add_edge(3,1)
g.add_edge(4,1)
simple_cycles(g)

# [[1,2,3,1],[1,2,3,4,1]]