3

我最终希望通过删除具有 2 个顶点的连接组件(即两个顶点之间都有一条边)来获得我的图形的一个子集,您可以将这个问题改写为:

 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)

提前致谢!

4

1 回答 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)
于 2013-10-10T04:51:54.693 回答