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

如何用igraph从根节点按从内到外顺序获取所有连通顶点

用igraph获取嵌套结构从最内层到最外层的节点顺序

首先明确数据对应的有向图逻辑:每条行的inner_obj → outer_obj代表内层节点嵌套于外层节点,图中边的方向为内层指向外层。我们需要对每个独立连通分量,按「最内层→最外层」的顺序输出节点列表,可通过拓扑排序实现,具体步骤如下:

  1. 加载igraph并构建有向图:
library(igraph)

test_df_4 <- data.frame(inner_obj= c(1, 3, 2, 6, 5),
                        outer_obj = c(3, 4, 1, 7, 6))
g <- graph_from_data_frame(test_df_4, directed = TRUE)
  1. 拆分所有独立的弱连通分量(嵌套结构为独立的无环子图):
comp <- components(g, mode = "weak")
  1. 对每个分量执行拓扑排序,结果即为从最内层到最外层的节点顺序:
result <- lapply(unique(comp$membership), function(mem) {
  component_nodes <- names(comp$membership[comp$membership == mem])
  sub_graph <- induced_subgraph(g, component_nodes)
  as.integer(topological.sort(sub_graph))
})

运行后result就是目标结果:

  • 第一个分量:[2, 1, 3, 4]
  • 第二个分量:[5, 6, 7]

注:你之前找到的根节点(最外层节点)是图中出度为0的节点,拓扑排序的终点恰好是这些节点,完全匹配需求顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:45:17