我最终希望通过删除具有2个顶点的连通组件来获取我的图形的子集(即两个顶点之间都有边缘)您可以将此问题重新表述为:
given an edge e = (s, d) if degree(s) == degree(d) == 1 then delete edge e
Run Code Online (Sandbox Code Playgroud)
我正在使用R和Igraph,我该怎么做?我知道我可以通过执行以下操作将我的图形子集化以删除零度的所有节点:
g = some_graph()
ldegs <- V(g)[degree(g) < 1]
g = delete.vertices(g, ldegs)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我不认为这太难了,你只需找到程度为== 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)
Run Code Online (Sandbox Code Playgroud)