- 最小生成树(无向图)
- 普利姆算法:
-
朴素版 Prim算法(O()):适用于稠密图。
- 基本思路:从任意一个顶点开始,逐步选择与当前生成树连接的权值最小的边,直到生成树包含所有顶点。
- 算法步骤:
- 初始化一个空的生成树和一个集合visited,将起始顶点加入visited。
- 循环n-1次(n为顶点数):
- 在visited集合外找到与当前生成树连接的最小权值边(u, v),其中u在visited中,v不在visited中。
- 将边(u, v)加入生成树,将v加入visited集合。
- 输出生成树。
- 简单实现:
-
堆优化版 Prim算法(O(mlogn)):适用于稀疏图。
- 基本思路:通过最小堆来选择与当前生成树连接的权值最小的边,提高算法效率。
- 算法步骤:
- 初始化一个空的生成树和一个集合visited,将起始顶点加入visited。
- 将与起始顶点相邻的边加入最小堆。
- 循环n-1次(n为顶点数):
- 从最小堆中选择权值最小的边(u, v),其中u在visited中,v不在visited中。
- 将边(u, v)加入生成树,将v加入visited集合。
- 将与顶点v相邻的未访问顶点的边加入最小堆。
- 输出生成树。
-
- 普利姆算法: