算法案例精讲:连接所有点的最小费用

我们先来看题目描述:

给你一个 points 数组,表示 2D 平面上的一些点,其中 pointsi = xi, yi 。 连接点 xi, yi 和点 xj, yj 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。 请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。

示例 1:

复制代码
输入:points = [[0,0],[2,2],[3,10],[5,2],[7,0]] 
输出:20 
解释: 

我们可以按照上图所示连接所有点得到最小总费用,总费用为 20 。

注意到任意两个点之间只有唯一一条路径互相到达。

示例 2:

复制代码
输入:points = [[3,12],[-2,5],[-4,1]] 
输出:18

示例 3:

复制代码
输入:points = [[0,0],[1,1],[1,0],[-1,1]] 
输出:4

示例 4:

复制代码
输入:points = [[-1000000,-1000000],[1000000,1000000]] 
输出:4000000

示例 5:

复制代码
输入:points = [[0,0]] 
输出:0

题解: Kruskal 算法需要用到 Union-Find 并查集算法,因为生成的树不能包含环,而并查集可以用来判环。 对于添加的某条边,如果该边的两个节点本来就在同一连通分量里,那么添加这条边会产生环;

反之,如果该边的两个节点不在同一连通分量里,则添加这条边不会产生环。 为了得到的这棵生成树是权重和最小的,用到了贪心思路: 将所有边按照权重从小到大排序,从权重最小的边开始遍历,如果这条边和 mst 中的其它边不会形成环,则这条边是最小生成树的一部分,将它加入 mst 集合;否则,这条边不是最小生成树的一部分,不要把它加入 mst 集合。

相关推荐
不懒不懒4 分钟前
【针对路面识别数据集,结合三轴加速度标准化数据及多路面识别需求,以下是算法选择与处理方案】
算法
Reart21 分钟前
Leetcode 121. 买卖股票的最佳时机(717)
后端·算法
会编程的小孩29 分钟前
初识数据类型以及变量定义
数据结构·算法
Reart39 分钟前
Leetcode 337.打家劫舍3(717)
后端·算法
梅梅绵绵冰41 分钟前
数据结构-时间复杂度
数据结构·算法
遥感知识服务44 分钟前
盐碱地、白屋顶和裸土都很亮,卫星怎样分清?
人工智能·算法·机器学习
可编程芯片开发1 小时前
基于PID控制器的车辆控制系统simulink建模与仿真
算法
广州灵眸科技有限公司1 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
-dzk-1 小时前
【哈希】LC 49.字母异位词分组
算法·哈希算法
·醉挽清风·2 小时前
学习笔记—算法—算法题
笔记·学习·算法