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

如何使用igraph获取最小生成树(MST)的基本环与基本割集

igraph获取MST对应基本环与基本割集的方法

以下基于R语言的igraph包给出实现方法,可直接匹配你提供的示例场景:

1 非MST边对应的基本环

igraph内置了fundamental_cycles()函数可直接返回所有非树边对应的基本环,无需手动实现逻辑,示例代码如下:

# 你的初始构造代码
A = matrix(c(
  0, 8, 0, 5, 0, 10,
  8, 0, 3, 6, 9, 10,
  0, 3, 0, 3, 9, 0,
  5, 6, 3, 0, 0, 0,
  0, 9, 9, 0, 0, 0,
  10, 10, 0, 0, 0, 0), nrow= 6 , ncol= 6  ,byrow = TRUE)  
g  <- graph.adjacency(A,weighted=TRUE, mode = c("undirected"))

# 计算MST
mst_g <- mst(g, weights = E(g)$weight)
# 获取所有基本环,每个环对应一条非MST边
fc <- fundamental_cycles(g, mst_g)

返回结果中:

  • fc$non.tree.edges 列出所有非树边,和结果中的环一一对应
  • fc$cycles 列出每个基本环的顶点序列
  • fc$edges 列出每个基本环包含的边
    你提到的非树边1-6对应的环,可直接通过上述结果匹配得到,和你示例的环完全一致。

2 MST边对应的基本割集

基本割集的逻辑是:移除某条树边后MST会拆分为两个连通分量,原图中所有跨这两个分量的边就是该树边对应的基本割集,实现代码如下:

# 以你示例的MST边1-4为例
# 找到MST中1-4对应的边id
target_tree_edge <- E(mst_g)[V(g)[1] %--% V(g)[4]]
# 移除该边,得到拆分后的MST
split_mst <- delete_edges(mst_g, target_tree_edge)
# 获取拆分后的两个连通分量
comp <- groups(components(split_mst))
# 提取原图中跨两个分量的所有边,即为对应的基本割集
cut_set <- E(g)[comp[[1]] %--% comp[[2]]]

打印cut_set即可得到你示例中的(1-4), (1-2), (1-6)三条边。如果需要批量获取所有树边的基本割集,遍历所有MST边重复上述逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:51:02