最小生成树算法概览

raw/articles/2026/05/最小生成树算法概览

一句话简介

最小生成树是图论经典问题,本文介绍生成树定义、最小生成树应用场景,以及 Kruskal 和 Prim 两种经典算法的核心原理。

核心内容

什么是生成树

生成树 是无向连通图 $G$ 的一个子图,包含 $G$ 中的所有顶点,且是一棵树(无环连通图)。

特性

  • 包含原图中的所有顶点
  • 边的数量为顶点数减一(V-1 条边)
  • 连通且无环

一个图可以有多个不同的生成树。

什么是最小生成树

如果图是加权图,最小生成树 就是边权重总和最小的生成树。

应用场景

  • 设计最低成本的通信网络
  • 电路布线
  • 管道铺设
  • 城市道路建设(连接所有城市且总成本最小)

边的权重可以代表距离、成本、时间等。

最小生成树算法

两种经典算法都基于贪心思想

Kruskal 算法

Prim 算法

具体代码实现在 Kruskal 算法Prim 算法 中讲解。

随机地图构造问题

最小生成树算法经过改造后,可用于生成游戏中的随机化迷宫、洞穴等场景。

核心思想:利用最小生成树算法 能够连接所有顶点且无环路 的特性,确保生成地图的连通性。通过引入随机性,创造每次都不同、看起来自然且复杂的地图结构。

观察不同算法的特点

  • Kruskal 算法生成:从图中的多个位置开始出现随机路径,最终连接成一个完整的迷宫地图
  • Prim 算法生成:地图初始状态全部都是障碍物,从起点开始向周围扩展路径,最终连接成一个完整的迷宫地图

生成的地图特点不同,可以用 BFS/DFS 算法体会不同算法生成地图的特点。

相关概念

  • :图结构基础
  • 生成树 (Spanning Tree)
  • 最小生成树 (Minimum Spanning Tree, MST)
  • Kruskal算法
  • Prim算法
  • 贪心算法
  • 并查集
  • 优先级队列

Interactive Graph