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

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