深入浅出Prim算法和Kruskal算法求最小生成树算法

深入浅出Prim算法和Kruskal算法求最小生成树:

Prim算法

​ 首先初始化距离 正无穷。

​ n 次迭代(因为要选中n个点),找到不在集合(当前生成树)中的且距离当前块最小的点(记作)m点,,用m点去更新其他掉到集合中的点的距离,标记这个点,这里区别Dijkstra算法求单源最短路,Dijkstra算法是从未确定的点中找到距离最小的点,去更新到 初始点的距离。

传送门:
858. Prim算法求最小生成树 - AcWing题库

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=510,INF = 0x3f3f3f3f; //INF 表示正无穷
int n,m;
int dist[N];// 表示到集合中的最短距离
int g[N][N];
bool st[N];int prim(){int res=0;memset(dist,0x3f,sizeof dist);//初始化距离for(int i=0;i<n;i++){ //一开始集合内没有任何点int t=-1;for(int j=1;j<=n;j++){// !st[j] 保证这个点在集合外// t==-1 表示当前没有找到任何一个点,比如一开始的时候,我们的结合中是没有任何一个点,我们默认放入第一个进去。if(!st[j]&&(t==-1||dist[t]>dist[j])){t=j;}// t 存放的是距离最小的点}if (i && dist[t] == INF) return INF;// 第一轮的时候不加入,因为此时只有一个点if (i) res += dist[t];st[t]=true; //将t这个点放入集合中for(int j=1;j<=n;j++){if(!st[j]){dist[j] = min(dist[j], g[t][j]); }} } return res;
}int main(){scanf("%d%d", &n, &m);memset(g, 0x3f, sizeof g);while (m -- ){int a, b, c;scanf("%d%d%d", &a, &b, &c);g[a][b] = g[b][a] = min(g[a][b], c); //保留长度最小的边,因为是最小生成树}int t = prim();if (t == INF) puts("impossible");//不联通else printf("%d\n", t);return 0;
} 

Kruskal算法:

传送门:

859. Kruskal算法求最小生成树 - AcWing题库

算法思想:

​ 首先按照权重从小到大排序.

​ 依次处理每一对,看边的两个点是否联通,使用并查集,如果判断两个点联通,有一个共同的父亲就可以。

​ 终止条件是:加入了n-1条边。

#include <iostream>
#include <cstring>
#include <algorithm>
#include<vector>using namespace std;
const int N =1e5+10,M=2e5+10,INF = 0x3f3f3f3f;
int n,m;
int p[N];
struct Node{int a,b,w;bool operator<(const Node& t){ // 重载小于运算符return w<t.w;}} Nodes[M] ;//定义一个结构体数组int find(int x){// 查找x的父亲元素if(p[x]!=x) p[x]=find(p[x]); // 这一步使用了路径压缩,也就是让孩子节点都指向了其祖宗元素return p[x]; 
} int  Kruskal(){sort(Nodes,Nodes+m);//排序for(int i=1;i<=n;i++) p[i]=i;int res=0,cnt=0;//res计算权值for(int i=0;i<m;i++){int a=Nodes[i].a,b=Nodes[i].b,w=Nodes[i].w;int fa=find(a),fb=find(b);if(fa!=fb){p[fa]=fb;//让a变成b的孩子cnt++;//边res+=w; }}if(cnt<n-1) return INF;return res;}int main()
{scanf("%d%d",&n,&m);for (int i = 0; i < m; i ++ ){int a, b, w;scanf("%d%d%d", &a, &b, &w);Nodes[i] = {a, b, w};//构造结构体数组}int res= Kruskal();if(res==INF) puts("impossible");else printf("%d\n",res);return 0;
}

当然了,排序的时候还可以这样写:

bool cmp(struct Node A, struct Node B)
{return A.w < B.w;
}sort(Nodes, Nodes + m,cmp);//第三个参数是一个比较规则

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

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

相关文章

目标检测——服饰属性标签识别数据集

一、重要性及意义 首先&#xff0c;随着电商、时尚推荐等业务的发展&#xff0c;服饰属性标签识别已经成为一项关键的计算机视觉任务。这些标签&#xff0c;如颜色、款式、材质等&#xff0c;对于实现图像搜索、时尚推荐等业务需求至关重要。服饰属性标签识别数据集为此类任务…

Excel 数据-分列的三个经常用法

Case 1 &#xff1a;有时候数据导出时如果没有电子表格的话&#xff0c;只能导出本地文件&#xff0c;如下图情况&#xff1a; 可以使用数据-分列处理数据&#xff1a; 原来是因为SAP导出数据没有完成的原因&#xff0c;或者关闭Excel重新打开试一下。 重新打开后可以输入了 C…

HarmonyOS Connect生态设备UX体验设计

HarmonyOS Connect生态设备UX体验设计 HarmonyOS Connect是华为推出的面向万物互联时代的设备连接与互操作解决方案&#xff0c;旨在打破设备之间的壁垒&#xff0c;提供无缝、便捷的用户体验。 HarmonyOS Connect生态设备UX体验设计的基本原则包括&#xff1a; 一致性&…

Kubernetes activemq artemis系列 | k8s部署artemis主从 v2.33.0

主从配置直通车 本文提供了yaml可直接使用&#xff08;镜像是自己构建的&#xff09; amqmaster.yaml apiVersion: apps/v1 kind: StatefulSet metadata:name: artemismasterlabels:app: artemisbroker: master spec:serviceName: artemismasterreplicas: 1selector:matchLa…

python3GUI--不同样式的登录注册界面By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;介绍&效果展示界面一1.注册2.登录3.切换效果 界面二1.注册2.登录3.切换效果 界面三1.注册3.登录3.切换效果 界面四1.注册2.登录3.切换效果 界面五1.注册2.登录3.切换效果 界面六1.注册2.普通登录3.快捷登录4.切换效果 界面七1.登…

网络检测与监控

1.IP sla 服务等级质量检测&#xff0c;思科私有&#xff0c;提供商与用户之间的协议 可以对带宽、延迟、丢包率、网络抖动进行检测 &#xff08;1&#xff09;针对icmp进行检测&#xff1a; r1(config)#ip sla 1 r1(config-ip-sla)#icmp-echo 12.12.12.2 source-ip 12.12…

在决策上,我不随便给别人建议

在决策上&#xff0c;我不随便给别人建议 之前看过一个视频&#xff0c;视频中主人公说**「我不随便给别人决策上的建议&#xff0c;我何德何能&#xff0c;自己还没活明白呢&#xff0c;给别人建议干啥。」** 这句话我挺认同的。 如果我自己很成功&#xff0c;那一定是靠你自…

基于FPGA的HDMI方块移动程序设计

前面写了一篇关于HDMI视频接口的文章《基于FPGA的HDMI视频接口的设计》&#xff0c;该文章对HDMI的相关知识点做了讲解&#xff0c;这里不再重复&#xff0c;本篇文章直接实现一个简单功能-方块的移动。 该系统程序主要实现的功能就是通过串口下发指令控制方块的位置移动&…

Docker基础系列之TLS和CA认证

Docker基础系列之TLS和CA认证 文章目录 Docker基础系列之TLS和CA认证1. 引言2. 初识TLS和CA3. 开启TLS和CA认证3.1 生成证书3.2 配置TLS 4. 参考和感谢 1. 引言 我们日常工作当中会遇到这些需求&#xff1a; 监控Docker容器在idea开发工具中连接Docker&#xff0c;直接发布至…

手搓Docker-Image-Creator(DIC)工具(03):实现alpine+jre的镜像

此篇博客将介绍如何使用 Docker 创建一个alpine3.10-jre1.8.0_401 的 Docker 镜像&#xff0c;并使用 Docker 运行起来。将用到 Dockerfile 的 COPY 命令、RUN 命令、ENV 命令&#xff0c;最终实现基于单一应用的 Dockerfile 构建镜像和运行。 紧急修改&#xff1a;代码我是在m…

【机器学习300问】60、图像分类任务中,训练数据不足会带来什么问题?如何缓解图像数据不足带来的问题?

在机器学习中&#xff0c;绝大部分模型都需要大量的数据进行训练和学习&#xff08;包括有监督学习和无监督学习&#xff09;&#xff0c;然而在实际应用中经常会遇到训练数据不足的问题。就比如图像分类这样的计算机视觉任务&#xff0c;确实依赖于大规模且多样化的训练数据以…

云数据中心传输的出路

研发端到端协议不是出路&#xff0c;研发更智能调度流量的交换机不是出路&#xff0c;将流量按长短突发模式分流到不同链路(逻辑的或物理的)才是出路。所有高速传输的前提是标准化&#xff0c;统一简单的操作。多么简单的领悟。 数据中心网络具有范围小&#xff0c;带宽大&…

FFmpeg 详解

FFmpeg 详解 FFmpeg 详解整体结构不同下载版本的区别常用库常用函数初始化封装格式解码器 版本对比组件注册方式对比FFmpeg 3.x 组件注册方式FFmpeg 4.x 组件注册方式 结构体比对函数对比avcodec_decode_video2()vcodec_encode_video2() 数据结构结构体分析AVFormatContextAVIn…

什么是原生IP?原生IP的作用是什么?

原生IP&#xff08;Native IP&#xff09;是指直接从互联网服务提供商&#xff08;ISP&#xff09;获得的IP地址&#xff0c;而非通过代理服务器、VPN或其他中间层方式获取。这种IP地址直接与用户的设备或网络关联&#xff0c;无需经过任何中间服务器或代理的转发或隐藏&#x…

[Java基础揉碎]枚举

目录 先看一个需求 枚举介绍: 枚举实现的方式: >自定义类实现枚举实例: >使用enum关键字实现枚举 ​编辑 enum关键字实现枚举注意事项 enum常用方法 enum细节 先看一个需求 要求创建季节(Season)对象&#xff0c;请设计并完成。 // 传统的方法建造一个类: clas…

5.vector容器的使用

文章目录 vector容器1.构造函数代码工程运行结果 2.赋值代码工程运行结果 3.容量和大小代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.互换容器代码工程运行结果 7.预留空间代码工程运行结果 vector容器 1.构造函数 /*1.默认构造-无参构造*/ …

第十三届蓝桥杯JavaA组省赛真题 - 求和

解题思路&#xff1a; 这&#xff0c;真的是&#xff0c;省赛真题吗... public class Main {public static void main(String[] args) {long res 0;for (int i 1; i < 20230408; i) {res i;}System.out.print(res);} }

C#学习笔记 面试提要

冒泡 for (int m 0; m < arr.Length; m) { for (int n 0; n < arr.Length - 1 - m; n) { if (arr[n] > arr[n1]) { int temp arr[n]; arr[n] arr[n 1]; arr[n1] temp; } } } 选择 for (int m 0; m < arr.Length; m) { int index 0; for (int n 1; n < …

SpringMVC上下文对象

SpringMVC上下文对象 在有些情况下&#xff0c;就算加了过滤器后我们现在还不能在 controller 层将 session 代码去掉&#xff01;因为在实际业务中对用户对象操作是非常常见的&#xff0c;而我们的业务代码一般都写在 Service 业务层&#xff0c;那么我们 Service 层想要操作…

hcip-datacom英文词汇积累简述1

路由策略: routing policy 节点 : node 使配对: if match 应用: apply 许可: permit 拒绝: deny 访问控制列表: access control list ( ACL) 区域: area 邻居: peer 查看OSPF路由表: display ospf routing 查看全局路由表: display ip routing 路由 ID : router-id 设置OSPF路由…