最小生成树算法概览
raw/articles/2026/05/最小生成树算法概览
一句话简介
最小生成树是图论经典问题,本文介绍生成树定义、最小生成树应用场景,以及 Kruskal 和 Prim 两种经典算法的核心原理。
核心内容
什么是生成树
生成树 是无向连通图 $G$ 的一个子图,包含 $G$ 中的所有顶点,且是一棵树(无环连通图)。
特性:
- 包含原图中的所有顶点
- 边的数量为顶点数减一(
V-1条边) - 连通且无环
一个图可以有多个不同的生成树。
什么是最小生成树
如果图是加权图,最小生成树 就是边权重总和最小的生成树。
应用场景:
- 设计最低成本的通信网络
- 电路布线
- 管道铺设
- 城市道路建设(连接所有城市且总成本最小)
边的权重可以代表距离、成本、时间等。
最小生成树算法
两种经典算法都基于贪心思想:
Kruskal 算法
- 对所有边按照权重排序
- 借助 DFS 中提到的 Union-Find 并查集算法 找到最小生成树
- 实现相对简单
Prim 算法
- 可以由 Dijkstra 算法 拓展而来
- 借助 优先级队列 动态排序的特性
- 逐步构造最小生成树
具体代码实现在 Kruskal 算法 和 Prim 算法 中讲解。
随机地图构造问题
最小生成树算法经过改造后,可用于生成游戏中的随机化迷宫、洞穴等场景。
核心思想:利用最小生成树算法 能够连接所有顶点且无环路 的特性,确保生成地图的连通性。通过引入随机性,创造每次都不同、看起来自然且复杂的地图结构。
观察不同算法的特点:
- Kruskal 算法生成:从图中的多个位置开始出现随机路径,最终连接成一个完整的迷宫地图
- Prim 算法生成:地图初始状态全部都是障碍物,从起点开始向周围扩展路径,最终连接成一个完整的迷宫地图
生成的地图特点不同,可以用 BFS/DFS 算法体会不同算法生成地图的特点。
相关概念
- 图:图结构基础
- 生成树 (Spanning Tree)
- 最小生成树 (Minimum Spanning Tree, MST)
- Kruskal算法
- Prim算法
- 贪心算法
- 并查集
- 优先级队列