You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言igraph如何基于组件最大度节点在图的不同组件间添加边

实现代码

library(igraph)

# 读取示例数据构建初始图
graph1 <-  graph_from_data_frame(g, directed = FALSE)
E(graph1)$weight <- g$values

# 计算图组件、节点度
cl <- components(graph1)
node_degree <- degree(graph1)

# 按组件分组,每个组件选1个度最高的节点(存在多个最高度节点时随机选1个)
hub_nodes <- tapply(names(node_degree), cl$membership, function(nodes) {
  deg <- node_degree[nodes]
  max_deg_nodes <- nodes[deg == max(deg)]
  sample(max_deg_nodes, size = 1)
})

# 所有组件的锚点两两加边连通全图,组件数为1时直接返回原图避免报错
if (cl$no > 1) {
  graph2 <- add.edges(
    graph1,
    c(combn(hub_nodes, 2)),
    weight = 0.01
  )
} else {
  graph2 <- graph1
}

逻辑说明

  1. 先计算全图所有节点的度值,再按组件归属对节点做分组
  2. 对每个组件的节点集合,先筛选出度值最大的节点子集,若子集内节点数大于1则随机抽选1个作为当前组件的连接锚点
  3. 把所有组件的锚点两两组合添加边,即可保证所有组件连通,且连接节点均为各组件的最高度节点
  4. 新增的判断逻辑兼容原图已经是连通图的场景,避免无组件可合并时报错

内容的提问来源于stack exchange,提问作者0Knowledge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:36:03