R和Igraph的边缘

3
我希望通过删除只有两个顶点的连通分量(即两个顶点之间有边)来获取我的图的子集。 你可以这样重新表述这个问题:
 given an edge e = (s, d) if degree(s) == degree(d) == 1 then delete edge e

我正在使用R和Igraph,我该怎么做?我知道我可以通过以下方式子集化我的图形来删除所有度为零的节点:
g = some_graph()
ldegs <- V(g)[degree(g) < 1]
g = delete.vertices(g, ldegs)

提前感谢您!

1个回答

5
我认为这并不太难,你只需要找到度数等于1的节点列表,找到它们的邻居,如果任何邻居在列表中,那么它们就是要删除的节点:
library(igraph)
g = erdos.renyi.game(100, 0.02)
ones = V(g)[degree(g) == 1]
one_ns = sapply(ones, neighbors, graph=g)
# If any of the neighbours are in ones, we
# can delete these
to_delete = one_ns[one_ns %in% ones]
# Visualize:
plot(g, mark.groups=to_delete)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接