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

在Csárdi的Igraph中构建跨两组节点的完全连通图方法求助

解决完全二部图构建的问题

你遇到的问题是用错了igraph的函数——graph.full是用来生成普通完全图(所有顶点两两相连)的,而非完全二部图。下面给你两种可行的解决方案,帮你生成连通的跨组完全图:

方案一:用igraph原生完全二部图函数(推荐)

graph.full.bipartite是igraph专门为完全二部图设计的函数,直接传入两个分区的顶点数即可,简单高效,尤其适合顶点数较多的场景:

library(igraph)

# 定义两组顶点的数量
group_A_size <- 8
group_B_size <- 147

# 生成无向完全二部图
g <- graph.full.bipartite(n1 = group_A_size, n2 = group_B_size, directed = FALSE)

# 验证图的连通性(执行后应该返回TRUE)
is.connected(g)

# 绘图(因为顶点总数较多,建议调整样式避免重叠)
plot(g, layout = layout.bipartite, vertex.size = 4, vertex.label = NA, edge.arrow.size = 0)

方案二:手动构建(适合理解底层逻辑)

如果你想沿用最初“先加顶点再加边”的思路,需要手动生成所有A组到B组的边,而不是用错误的graph.full:

library(igraph)

# 定义两组顶点的标识(比如A组用1-8,B组用9-155)
A <- 1:8
B <- 9:155

# 创建空无向图
g <- make_empty_graph(directed = FALSE)
# 添加两组顶点,同时标记分区类型(方便后续二部图布局)
g <- g + vertices(A, type = FALSE) + vertices(B, type = TRUE)
# 生成所有A到B的边组合
cross_edges <- expand.grid(from = A, to = B)
# 将边批量添加到图中
g <- g + edges(as.vector(t(cross_edges)))

# 验证连通性
is.connected(g)

为什么你的原代码会生成非连通图?

你的原代码里graph.full(A, B)的用法完全不符合函数要求:graph.full的第一个参数是总顶点数,第二个参数是是否有向,它会生成一个所有顶点两两相连的完全图,但你传入的是两个顶点向量,函数会把它们解析成错误的参数,最终生成的不是你想要的跨组连接结构,自然会出现非连通的情况。

内容的提问来源于stack exchange,提问作者Artur Neves de Assis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:13:35