返回
当前 - 选择题 - 最小生成树
困难
题号:0120200500038
单选题
2020年5月第38题

某乡8个小村(编号为1~8)之间的距离如下表(单位: km)。 1 号村离水库最近,为5km,从水库开始铺设水管将各村连接起来,最少需要铺设(11.3km) 长的水管(为便于管理和维修,水管分叉必须设在各村处)。

问题(1)
浓缩知识点

最小生成树(MST)适用于连通所有节点且总权重(如距离、成本)最小的网络构建问题,常见在管线铺设、路网规划、通信组网等场景中。求解最小生成树的经典算法之一是Kruskal算法,核心流程为:先将所有节点间的边按权重从小到大排序,再依次选取边,选取时要保证当前边不会和已选边形成回路,直到所有节点连通,此时选中边的权重之和就是最小生成树的总权重。如果存在外部起点,需先选取起点到任意节点的最短连接,再结合节点间最小生成树的总权重,得到整体的最短总路径。此外,求解最小生成树还有Prim算法,Kruskal算法更适配节点多、边少的稀疏图场景,Prim算法则更适合稠密图场景。

正确答案
B

本题考察的是最小生成树(MST)Kruskal 算法 的应用。

  1. 3km由于分叉只能在村庄,且水库到村庄只能接一条主管,因此总长度 = 水库到某一村的连接长度(显然取到 1 号村的 5 km)+ 8 个村之间的最小生成树长度。

由于分叉只能在村庄,且水库到村庄只能接一条主管,因此总长度 = 水库到某一村的连接长度(显然取到 1 号村的 5 km)+ 8 个村之间的最小生成树长度
下面用 Kruskal 算法求 8 个村的 MST。
将表中边按距离从小到大选取,且不形成回路:先取 (7,8)=0.5,再取 (6,7)=0.8
随后在所有 1.0 km 的边中选取能连通且不成环的五条,例如 (1,4)=1.0、(2,3)=1.0、(2,5)=1.0、(3,8)=1.0、(4,8)=1.0
此时 7 条边已把 8 个村全部连通,得到 MST 长度 = 0.5 + 0.8 + 1.0×5 = 6.3 km
再加上水库到 1 号村的 5 km,总最短长度为 5 + 6.3 = 11.3 km
选择选项 B。

联系我们
隐私协议
用户协议
微信公众号
知乎
小红书
浙ICP备2021029036号
@2022-2026
嘉兴市安芯网络科技有限公司 版权所有