LeetCode题目,1584. Min Cost to Connect All Points
先看题目描述
大意就是给定很多个二维点的坐标,连接点的费用是这两个点之间的曼哈顿距离,问将所有点连通的最小花费是多少
算法和思路
这题本质上就是给定一个图,让我们求出这个图的最小生成树,并将最小生成树的权值返回,求最小生成树有两个很经典的算法,Kruskal 算法 和 Prim 算法
Kruskal 算法的基本思路是从小到大加入边,直至得到最小生成树,本质是一个贪心算法
Prim 算法的基本思路是将点分为两类,A 类是已经在树中的点,其他的点是 B 类,初始时 A 类中只有第一个点,每次都从 B 类中选出若要加入 A 类花费的代价最小的点加入 A 类,直至 B 类点为空,得到最小生成树,这也是一个贪心算法
算法源码
这两个算法中都使用了并查集,用于判断边的两顶点是否在一个连通分量中
Kruskal 算法
1 | class Solution { |
Prim 算法
1 | class Solution { |