最小生成树
Kruskal 克鲁斯卡尔算法
func BuildMST(n int, edges [][]int) int {
sort(edges) // 按代价排序。也可以使用最小堆,性能更好
set := UnionFind{} // 依赖于并查集,保证不产生圈
set.Init(n)
res := make([][]int, 0)
for _, edge := range edges { // 尝试将每条边加入并查集
if set.Union(edge[0], edge[1]) { // 如果产生圈,则这两个点会指向同一个根节点,这里会返回false
res = append(res, edge) // 没圈就把边放入结果集
}
}
return res
}Prime 普里姆算法

例题
参考
Last updated