mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
321 字
1 分钟
Prim和Kruskal算法
2026-04-07

Prim和Kruskal算法#

最小生成树#

定义:#

在阅读下列内容之前,请务必阅读 图论相关概念树基础 部分,并了解以下定义:

  1. 生成子图
  2. 生成树

我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树.

Eg:只有连通图才有生成树,而对于非连通图,只存在生成森林. 最小生成树的边数等于顶点数减1.

Prim算法#

Prim(普利姆)算法:每次将代价最小新顶点纳入生成树,直到所有顶点都纳入为止。

image-20260407100846670

Eg:一个原无向图可以有多个最小生成树

Prim算法实现(伪代码)#

void Prim(G, T) {
T = ∅; // 初始化空生成树
U = { w }; // 任选一顶点 w 加入集合 U
while (V - U ≠ ∅) { // 若树中不包含全部顶点
设 (u, v) 是连接 U 与 V−U 的最小权边(u ∈ U, v ∈ V−U);
T = T ∪ {(u, v)}; // 边入树
U = U ∪ {v}; // 点入树
}
}

Kruskal算法#

Kruskal(克鲁斯卡尔)算法:每次将代价最小已连通的不加入)纳入生成树,直到所有顶点都连通为止。

image-20260407101425102

Eg:一个原无向图可以有多个最小生成树

Kruskal算法实现(伪代码)#

void Kruskal(V, T) {
T = V;
numS = n; // 连通分量数
while (numS > 1) { // 若连通分量大于1
从E中取出权值最小的边 (v, u) ;
if(v和u属于T中不同的连通分量){
T = T ∪ {(v, u)}; // 边入树
numS--;
}
}
}

Prim和Kruskal算法区别#

Prim更适用于稠密图,即边多的图。

Kruskal更适用于稀疏图,即点多的图。

动画演示#

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Prim和Kruskal算法
https://yubendan.com/posts/ds/prim和kruskal算法/
作者
Yubendan
发布于
2026-04-07
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00