力扣--图论/Prim1584.连接所有点的最小费用

思路分析:

  1. 初始化:获取点的数量,并创建两个辅助数组 adjvexlowcost,分别用于记录最小生成树的边信息和每个顶点到最小生成树的距离。
  2. Prim算法循环:在每一次循环中,选择一个未加入最小生成树的顶点 k,使得从已加入最小生成树的顶点到 k 的距离最小。循环 n-1 次,每次选择一个顶点加入最小生成树。
  3. 找出下一个顶点:遍历所有未加入最小生成树的顶点,选择距离最小的顶点 k,加入最小生成树,并标记顶点 k 已被访问。
  4. 更新最小生成树信息:更新 lowcost 数组,更新每个顶点到最小生成树的距离。
  5. 计算总成本:计算最小生成树的总成本,即所有边的长度之和,并返回。
class Solution {
public:int minCostConnectPoints(vector<vector<int>>& points) {int n = points.size(); // 获取点的数量// 用于存储最小生成树的边信息vector<int> adjvex(n, 0); // 记录最小生成树的顶点的下标vector<int> lowcost(n, 0); // 记录从最小生成树中的某顶点到其它顶点的最小权值// 初始化lowcost数组,将除了第一个点以外的顶点到第一个点的距离记录下来for(int i = 1; i < n; i++)lowcost[i] = abs(points[i][0] - points[0][0]) + abs(points[i][1] - points[0][1]);// 用于记录顶点是否已被访问过vector<bool> visited(n, false);// Prim算法的主要循环,构建最小生成树for(int t = 0; t < n - 1; t++) {int k = 1, min = INT_MAX;// 找出lowcost数组中的最小值for(int i = 1; i < n; i++) {if(lowcost[i] < min && visited[i] == false) {min = lowcost[i];k = i;}}// 标记顶点k已被访问visited[k] = true;// 将k顶点到其它顶点的权值设为0,表示已加入最小生成树lowcost[k] = 0;// 更新lowcost数组中的值for(int i = 1; i < n; i++) {if(i != k) {// 计算顶点i到顶点k的距离int close = abs(points[i][0] - points[k][0]) + abs(points[i][1] - points[k][1]);// 如果顶点i到顶点k的距离小于当前到顶点i的最小权值,则更新相应信息if(lowcost[i] > close) {adjvex[i] = k;lowcost[i] = close;}}}}// 计算最小生成树的总成本int num = 0;for(int i = 0; i < n; i++) {num += abs(points[i][0] - points[adjvex[i]][0]) + abs(points[i][1] - points[adjvex[i]][1]);}// 返回最小生成树的总成本return num;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/305354.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考122-上午题-【软件工程】-需求分析

一、软件需求 在进行需求获取之前&#xff0c;首先要明确需要获取什么&#xff0c;也就是需求包含哪些内容。 软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通常&#xff0c;这些需求包括功能需求、性能需求、用户或人的因素、环境需求、界面需…

科研学习|可视化——相关性结果的可视化

一、相关性分析介绍 相关性分析是指研究两种或者两种以上的变量之间相关关系的统计分析方法&#xff0c;一般分析步骤为&#xff1a; 1&#xff09;判断变量间是否存在关联&#xff1b;2&#xff09;分析关联关系&#xff08;线性/非线性&#xff09;、关联方向&#xff08;正相…

Qt中的网络通信

C没有封装专门的网络套接字的类&#xff0c;因此C只能调用C对应的API&#xff0c;而在Linux和Windows环境下的API都是不一样的 Qt作为一个C框架提供了相关封装好的套接字通信类 在Qt中需要用到两个类&#xff0c;两个类都属于network且都是属于IO操作&#xff0c;只不过这两个类…

混合云构建-如何通过Site to Site VPN 连接 AWS 和GCP云并建立一个高可用的VPN通信

如果我们的业务环境既有AWS云又有GCP云,那么就需要将他们打通,最经济便捷的方式就是通过Site-to-Site VPN连接AWS和GCP云,你需要在两个云平台上分别配置VPN网关,并建立一个VPN隧道来安全地连接这两个环境,我们下面演示一个高可用场景下的S2S VPN线路构建,采用动态BGP协议…

Innodb架构解析

整体架构 通过《面试官&#xff1a;一条SQL是如何执行的&#xff1f;》我们了解了MySQL架构&#xff0c;下面我们看下Innodb架构。 innodb最早由Innobase Oy公司开发&#xff0c;5.5版本开始是MySQL默认存储引擎&#xff0c;该存储引擎是第一个完整支持ACID事务的MySQL存储引…

git修改本地提交历史邮箱地址

1、Git&#xff08;Git&#xff09; 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下&#xff1a;&#xff08;https://git-scm.com/docs/git-rebase&#xff09; 1、查看提交历史&#xff1a; 使用 git log 命令列出提交历史&#x…

弹簧、质量的bode、nyquist与根轨迹图

在控制系统分析中&#xff0c;Bode图、Nyquist图和根轨迹图都是重要的工具&#xff0c;用于评估和分析系统的性能。这些系统的Nyquist图提供了最大的旋转&#xff0c;即它们在频率变化时表现出最大的相位变化。当Nyquist图完全位于虚轴上时&#xff0c;意味着系统的增益&#x…

【学习】移动端兼容性测试有什么方法及重要性

随着移动互联网的快速发展&#xff0c;移动应用程序已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;由于各种移动设备的硬件和软件差异&#xff0c;移动应用程序的兼容性问题也越来越突出。因此&#xff0c;移动端兼容性测试成为了一个重要的环节&#xff0c;它可以…

猝不及防 CCF-B ICPP 2024投稿延期至4月22日提交摘要 机会来了别错过

会议之眼 快讯 第53届ICPP&#xff08;International Conference on Parallel Processing&#xff09;即国际并行处理会议将于 2024年 8月12日-15日在瑞典哥特兰岛举行&#xff01;ICPP是世界上最古老的连续举办的并行计算计算机科学会议之一。它是学术界、工业界和政府的研究…

1572. 【基础赛】涂色(paint)

1572. 【基础赛】涂色&#xff08;paint&#xff09; (Input: paint.in, Output: paint.out) 时间限制: 2 s 空间限制: 256 MB 具体限制 题目描述 Introl获得了一个N行的杨辉三角&#xff0c;他将每行中值为奇数的位置涂为了黑色。 Chihiro将提出M次询问&#xff0c;在第L…

C语言强制类型转换

目录 王道ppt总结&#xff1a; ​编辑相关博主文章&#xff1a; 王道ppt总结&#xff1a; 相关博主文章&#xff1a;char范围详解&#xff0c;为什么是-128~127,以及int类型范围详解&#xff08;整型数据在内存中的存储&#xff09;_char型和int型数据范围-CSDN博客https://b…

数据分析——数据规范化

数据规范化是数据分析中的一个重要步骤&#xff0c;其目的在于确保数据的一致性和可比性&#xff0c;提高数据质量和分析结果的准确性。以下是一些数据规范化的常见方法和技术&#xff1a; 数据清洗&#xff1a;此步骤主要清除数据中的重复项、空格、格式错误等&#xff0c;确…

微信小程序uniapp+vue电力巡线任务故障报修管理系统2q91t

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 前端开发:vue 语言&#xff1a;javapythonnodejsphp均支持 运行软件:idea/eclipse/vscode/pycharm/wamp均支持 框架支持:Ssm/django/flask/t…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第九套

华为海思校园招聘-芯片-数字 IC 方向 题目分享(共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;——第九套 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff…

套接字通信模型

本文内容主要参考《Android图形显示系统》 套接字也就是socket&#xff0c;一般用于网络中两个主机之间应用进程进行通信&#xff0c;在同一个主机也可以使用套接字完成进程之间的通信。 在图形显示系统中&#xff0c;用到套接字进行通信的地方主要有VSync信号的分发以及输入事…

代码随想录算法训练营第五十一天 |309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费

代码随想录算法训练营第五十一天 |309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费 309. 买卖股票的最佳时机含冷冻期题目解法 714. 买卖股票的最佳时机含手续费题目解法 感悟 309. 买卖股票的最佳时机含冷冻期 题目 解法 题解链接 1. class Solution { …

2012年认证杯SPSSPRO杯数学建模A题(第二阶段)蜘蛛网全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 A题 蜘蛛网 原题再现&#xff1a; 第二阶段问题   现在我们假设一个具体的环境。假设有一个凸多边形的区域&#xff0c;蜘蛛准备在这个区域&#xff08;或其一部分&#xff09;上结一张网。   问题一&#xff1a; 在区域的边界上安置有若干…

在keil里用c++编程(1)

做嵌入式开发时&#xff0c;我们对使用c语言写的库有强烈的需求&#xff0c;比如eigen&#xff0c;boost等&#xff0c;但是通常来说&#xff0c;我们的开发是围绕c语言进行的&#xff0c;怎么把c的库文件放在c语言环境下进行编译&#xff0c;就是我们需要面对的问题 1.问题来…

【c++】STl-list使用list模拟实现

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 …

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …