leetcode 1584. Min Cost to Connect All Points(连接所有点的最小开销)

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

You are given an array points representing integer coordinates of some points on a 2D-plane, where points[i] = [xi, yi].

The cost of connecting two points [xi, yi] and [xj, yj] is the manhattan distance between them: |xi - xj| + |yi - yj|, where |val| denotes the absolute value of val.

Return the minimum cost to make all points connected. All points are connected if there is exactly one simple path between any two points.

在这里插入图片描述
本题是MST(最小生成树)算法,每个点到点的边有一个cost,求连接所有点的最小cost。

思路:
最小生成树算法有Kruskal算法和Prim算法。
Kruskal算法是每次加一条边,Prim算法是每次加一个点。
这里用Prim算法(因为它的代码比较短)。

贴别人一张图(链接)
在这里插入图片描述
可以看到Prim算法是把所有点逐步加入到MST的过程。

首先以某点为出发点(这里以0为出发点),把出发点0加入MST(boolean数组中true的点),

遍历MST中的所有点,计算其他点和它们连接的cost,形成(nextNode, cost),把它们加入list,
这时候要注意,已经在MST中的点就不要再重复计算了。

下次再选出cost最小的nextNode当作出发点(这是当前出发点对应的cost最小边的另一头的点),重复这一过程,直到所有点都在MST中(用一个count计数)。

实现的时候,如果用list,每次都要找cost最小的,比较耗时,不如直接用最小堆minHeap,每次直接取cost最小的(node, cost)对,
添加的时候也是O(logn)复杂度。

*Java SE9中已经有Pair类了,可以直接用Pair(node, cost)。

    public int minCostConnectPoints(int[][] points) {
        PriorityQueue<Pair<Integer, Integer>> minHeap = new PriorityQueue<>(
            (a, b)->(a.getValue() - b.getValue())); //(node, weight)
        int n = points.length;
        boolean[] inMST = new boolean[n];
        int minCost = 0;
        int usedNode = 0; //处理过与node相连接的点后才算used
        
        minHeap.add(new Pair(0, 0)); //node 0, weight 0
        
        while(usedNode < n) {
            Pair<Integer, Integer> cur = minHeap.poll(); //取出weight最小的(node, cost)
            int curNode = cur.getKey();
            int curWeight = cur.getValue();
            
            if(inMST[curNode]) continue;  //选出来的边的另一顶点已经在MST中了,跳过
            
            minCost += curWeight;  //加上cost
            
            inMST[curNode] = true;  //MST中加入新的点
            usedNode ++;
            
            //以新加入的点为顶点,找到与它连接的所有点,加到minHeap中,供下次挑选
            for(int nextNode = 0; nextNode < n; nextNode ++) {
                if(inMST[nextNode]) continue;
                int nextWeight = Math.abs(points[curNode][0] - points[nextNode][0]) +
                    Math.abs(points[curNode][1] - points[nextNode][1]);
                minHeap.add(new Pair(nextNode, nextWeight));
            }
        }
        return minCost;
    }
全国充电站分布数据 CnOpenData推出的充电站数据覆盖全国34个省份的3万条数据,包含充电站名称、省份名称、省份代码、商圈、经纬度等地理信息以及商业类型、评分、消费等衍生信息,能为城市规划、环境科学、市场分析、技术发展和社会经济研究等多个领域提供宝贵的数据支持。 阅读详情

相关推荐

IMU自动校准论文与代码实现A Robust and Easy to Implement Method for IMU Calibration without External Equipments

PART1 摘要 低成本的惯性测量单元会受到系统误差的影响,系统误差由标度因子和轴偏差造成,这会降低位置和姿态估计的精度。 本文提出了一种无需任何外部设备的,鲁棒性强,易于实现的IMU校准方法。 该程序基于多放置方案,再估计传感器偏差的同时,为加速度和陀螺仪三轴的尺度和偏差系数。我们的方法只需要用手移动传感器,并将其放置在一组不同的静态位置(姿态)。 论文描述了一个鲁棒的快速校准协议,...

qq_29313679的博客 5308

LeetCode—1584. 连接所有点的最小费用(Min Cost to Connect All Points)——分析及代码(Java)

LeetCode—1584. 连接所有点的最小费用[Min Cost to Connect All Points]——分析及代码[Java]一、题目二、分析及代码1. 并查集 + Kruskal 算法(1)思路(2)代码(3)结果三、其他 一、题目 给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :

江南土豆的博客 479

Android BluetoothSocket

BluetoothSocket是Android中用于在蓝牙设备之间进行数据传输的一种Socket。它提供了一种类似于TCP/IP协议的数据传输方式,可以在两个设备之间建立一个虚拟的通信管道,使得两个设备之间可以进行数据的传输和接收。BluetoothSocket可以用于客户端和服务端之间的通信,通过BluetoothSocket可以实现数据的双向传输。

liuning1985622的博客 1477

leetCode1584:连接所有点的最小费用

目录 一、题目描述 二、解题思路 三、代码实现 一、题目描述 给你一个points数组,表示 2D 平面上的一些点,其中points[i] = [xi, yi]。 连接点[xi, yi] 和点[xj, yj]的费用为它们之间的 曼哈顿距离:|xi - xj| + |yi - yj|,其中|val|表示val的绝对值。 请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有一条简单路径时,才认为所有点都已连接。 示例 1: 输入:points = ...

三中两明的博客 722

告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序

本文提供了一套完整的Burp+Proxifier配置方案,确保稳定抓取微信小程序数据。从环境准备、工具选型到Burp Suite深度配置和Proxifier精准设置,详细解决了证书安装、进程捕获和乱码解析等核心问题,帮助开发者告别抓包失败,提升调试效率。

weixin_28738165的博客 451

使用BK3432芯片进行蓝牙开发的详细指南:编程手册与实际应用

BK3432是一款蓝牙4.2双模式芯片,支持蓝牙低功耗(BLE)和经典蓝牙(BR/EDR)模式。它集成了高性能的RF收发器、基带处理器、ARM9E内核、丰富的功能外设单元,并支持BLE应用的可编程协议和概要文件。蓝牙版本:4.2数据速率:最高支持2Mbps内核:ARM9ERF收发器:高性能、低功耗外设单元:包括UART、SPI、I2C、GPIO等功耗:超低功耗设计,适合电池供电的应用。

m0_57781768的博客 4446

LeetCode 1584. 连接所有点的最小费用【最小生成树】

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。为了方便在PC上运行调试、分享代码文件,我还建立了相关的。

memcpy0的博客 731

【GPFS专题5】---IBM Spectrum Scale (GPFS) 日常运维命令大全

掌握这些命令是有效管理 GPFS 集群的基础。实际生产环境中,建议结合自动化脚本和监控系统(如 IBM Storage Insights)实现高效运维。定期备份配置、监控性能指标,并进行灾备演练,是保障数据安全和系统稳定的关键。

jundao1997的专栏 838

LeetCode. 1584. 连接所有点的最小费用(最小生成树/Kruskal 算法/并查集)

文章目录题目方法一:Kruskal 算法方法二:建图优化的 KruskalReference 题目 1584. 连接所有点的最小费用 方法一:Kruskal 算法 Kruskal 算法是一种常见并且好写的最小生成树算法。该算法的基本思想是从小到大加入边,是一个贪心算法。 其算法流程为: 假设连通图G=(V,E)G=(V,E)G=(V,E),令最小生成树的初始状态为只有nnn个顶点而无边的非连通图T=(V,{})T=(V,\{\})T=(V,{}),图中每个顶点自成一个连通分量 在EEE中选

xylitolz的博客 654

华为od 面试八股文_JAVA语言_01_含答案

华为od 面试八股文_JAVA语言_01_含答案

MISAYAONE的博客 4296

基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真

新能源微电网是现代电力系统的重要组成部分,能够有效整合分布式能源(如光伏、风力发电)和储能设备,实现局部区域内的能源高效利用。微电网的运行控制涉及多源能量管理、负荷平衡以及并网/孤岛模式切换等关键问题。基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真,可以帮助研究者验证控制策略的有效性,并优化系统的动态性能和经济性。本项目旨在构建一个完整的新能源微电网模型,包括电源模块、储能模块、负荷模块以及控制器模块,并通过仿真分析其运行特性。

xiaoheshang_123的博客 420

【LeetCode】1584 and 144(Kruskal 最⼩⽣成树算法)

「树」和「图」最大的区别就是树不会包含环,而图可以包含环。换句话说,树就是「无环连通图」。 那么什么是图的「⽣成树」呢,其实按字⾯意思也好理解,就是在图中找⼀棵包含图中的所有节点的树。专业点说,⽣成树是含有图中所有顶点的「⽆环连通⼦图」。

wsc的博客 1213

YOLOv11涨点改进 | Neck改进篇 | YOLOv11引入 BiFPN双向特征金字塔网络,显著提升了多尺度特征融合效率

本文介绍了基于BiFPN特征融合模块优化的YOLOv11目标检测模型。BiFPN通过双向跨尺度连接和加权特征融合机制,显著提升了多尺度特征融合效率。该方法在COCO数据集上实现了55.1AP的检测精度,同时大幅降低计算成本(减少13-42倍FLOPs)。文章详细解析了BiFPN模块结构、核心代码实现方法,并提供了YOLOv11-BiFPN配置文件的修改指导,为计算机视觉领域提供了一种高效的目标检测解决方案。

Ai缝合怪、助力小伙伴高效发论文 707

Leetcode 1584. Min Cost to Connect All Points (python)

Leetcode 1584. Min Cost to Connect All Points题目错误解法:解法:Minimum spanning tree 题目 错误解法: 最开始以为通过判断加入的边的数量和被访问过的点的数量可以判断是不是符合条件了,其实这样是不成立的,可以举出很多反例 class Solution(object): def minCostConnectPoints(self, points): """ :type points: List[Lis

qq_37821701的博客 1109

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Leetcode】1584. Min Cost to Connect All Points

题目地址: https://leetcode.com/problems/min-cost-to-connect-all-points/ 给定nnn个二维平面的点的坐标,两个点之间的距离采用曼哈顿距离,并且连接两个点的花费就是这个曼哈顿距离。问要将所有点连通的最小花费。 其实就是求稠密图的最小生成树。可以用Prim算法在O(n2)O(n^2)O(n2)时间内完成。由于边数有n(n−1)2\frac{n(n-1)}{2}2n(n−1)​条,如果用Kruskal算法需要O(n2log⁡n)O(n^2\log n)

数学、算法爱好者的博客 185

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode:1584. Min Cost to Connect All Points连接所有点的最小费用(C语言)

题目描述: 给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [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

C/C++攻城狮 373

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

leetcode 刷题报告 1584 Min Cost to Connect All Points python 并查集 MST

MST 并查集 Krusakal

weixin_41147129的博客 403

LeetCode每日一题(1584. Min Cost to Connect All Points)

You are given an array points representing integer coordinates of some points on a 2D-plane, where points[i] = [xi, yi]. The cost of connecting two points [xi, yi] and [xj, yj] is the manhattan distance between them: |xi - xj| + |yi - yj|, where |val| deno

wangjun861205的博客 237

1584. Min Cost to Connect All Points(Leetcode每日一题-2021.01.19)

Problem You are given an array points representing integer coordinates of some points on a 2D-plane, where points[i] = [xi, yi]. The cost of connecting two points [xi, yi] and [xj, yj] is the manhattan distance between them: |xi - xj| + |yi - yj|, where |v

Bryan要加油 525

leetcode 1584. 连接所有点的最小费用-Min Cost to Connect All Points

Problem:并查集,最小生成树,方式是对任意两点,若这两点不在同一颗树里面,也就是ua.find(i)!=ua.find(j),拿到最小的距离mi,并查集合并这两点,cost累加mi,不停的循环,直到并查集内计数count==1可以事先求出任意两点的距离,用矩阵tr存储。

邹九的个人博客 76

Leetcode 1584. Min Cost to Connect All Points [Python]

并查集,也考察最小生成树科鲁斯卡算法。把每两个点的距离算出,以三元组形式储存,以距离大小做排序。然后以edge的数量为指标做for循环,弹出三元组,做Union操作,可以Union的,距离加入最后res,增加一条边。 class Solution: def minCostConnectPoints(self, points: List[List[int]]) -> int: p = [i for i in range(len(points))]

sinat_30403031的博客 152

leetcode1584 ----关于Kruskal算法(平民版)

Kruskal(平民版)

m0_70182904的博客 243

leetcode1584. 连接所有点的最小费用 最小生成树

【代码】leetcode1584. 连接所有点的最小费用 最小生成树。

ResumeProject的博客 203

Leetcode 1584. 连接所有点的最小费用

连接点 [x_i, y_i] 和点 [x_j, y_j] 的费用为它们之间的 曼哈顿距离 :|x_i – x_j| + |y_i – y_j| ,其中 |val| 表示 val 的绝对值。给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [x_i, y_i]。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。Python代码(Kruskal算法)(附并查集模板)最小生成树+Prim算法/Kruskal算法。Python代码(附Prim算法模板)

m0_51437455的博客 478

⭐算法OJ⭐连接所有点的最小费用【最小生成树】(C++实现)Min Cost to Connect All Points

给定一组二维平面上的点,其中 points[i] = [xi, yi]。连接两点 [xi, yi] 和 [xj, yj] 的费用是它们之间的曼哈顿距离:|xi - xj| + |yi - yj|。返回连接所有点所需的最小总费用。所有点都应该被连接,并且任意两点之间有且只有一条路径。这是一个典型的最小生成树(MST)问题,可以使用 Kruskal算法 或 Prim算法 解决。

大葱的田地🌱 1067

LeetCode刷题(每日一题) --1584. 连接所有点的最小费用(并查集)

题目 给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [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 解释

Hanzoe的博客 559
上一篇: cpp enum & enum class
下一篇: cpp [&]
蓝羽飞鸟
博客等级 码龄8年 0粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值