基于加权无向图,同屏展现 Prim 点集向外贪心扩张与 Kruskal 边集并查集判环的逻辑对比
最小生成树 (MST) 是指在加权无向连通图中,选择 $N-1$ 条边连接所有 $N$ 个顶点,且边权之和最小的生成树。
// Kruskal's MST Algorithm (并查集合并)
struct Edge {
int u, v, w;
bool operator<(const Edge& o) const { return w < o.w; }
};
void kruskal() {
sort(edges.begin(), edges.end()); // 1. 全局边权排序
for (int i = 1; i <= n; i++) parent[i] = i; // 初始化并查集
int mst_weight = 0, edge_count = 0;
for (auto e : edges) {
int rootU = find(e.u);
int rootV = find(e.v);
if (rootU != rootV) { // 2. 若不连通则安全加入,防环!
unionSet(rootU, rootV);
mst_weight += e.w;
edge_count++;
if (edge_count == n - 1) break;
}
}
}