我想在igraph中手工实现Bron-Kerbosch算法我想用Wikipedia page中的图形复制这个示例。这是我到目前为止想出的解决办法。
library(igraph)
g <- graph.formula(1-2,1-5,5-2,2-3,3-4,4-5,4-6)
P <- as.vector(V(g))
bron_kerbosch <- function(R,P,X) {
if (length(P) == 0 && length(X) == 0) {
print (R)
} else {
for (v in P) {
neis <- as.vector(neighbors(g,v))
bron_kerbosch(union(R,v),intersect(P,neis),intersect(X,neis))
P <- c(P[-which(P==v)])
X <- c(X,v)
}
}
}
> bron_kerbosch(c(),P,c())
[1] 1 2 3
[1] 2 4
[1] 3 5
[1] 4 5
[1] 5 6
答案应该是:
[[1,2,5],[2,3],[3,4],[4,5],[4,6]]
我是从1索引,而不是从0索引。
知道我做错了什么吗?
最佳答案
我刚刚找到了解决办法我使用g图的索引,而不是名称:/。
所以我换了两行:
P <- V(g)$name
neis <- neighbors(g,v)$name
现在可以用字符代替数字了结果是:
[1] "1" "2" "5"
[1] "2" "3"
[1] "5" "4"
[1] "3" "4"
[1] "4" "6"
所以顶点不是有序的(5,4)应该是(4,5),但我认为这无关紧要不过,最好将其写入整数,而不是字符。