最小生成树 Kruskal算法 Prim算法
文章目录
- Kruskal算法
- 模板:
- Prim算法
- 模板:
Kruskal算法
模板:
https://blog.csdn.net/Rain722/article/details/65642992
Kruskal是另一个计算最小生成树的算法,其算法原理如下。首先,将每个顶点放入其自身的数据集合中。然后,按照权值的升序来选择边。当选择每条边时,判断定义边的顶点是否在不同的数据集中。如果是,将此边插入最小生成树的集合中,同时,将集合中包含每个顶点的联合体取出,如果不是,就移动到下一条边。重复这个过程直到所有的边都探查过。
下面还是用一组图示来表现算法的过程:
1 初始情况,一个联通图,定义针对边的数据结构,包括起点,终点,边长度:
2 继续找到第二短的边,将c, d再放入同一个集合里:
3 继续找,找到第三短的边ab,因为a,e已经在一个集合里,再将b加入:
4 继续找,找到b,e,因为b,e已经同属于一个集合,连起来的话就形成环了,所以边be不加入最小生成树:
5 再找,找到bc,因为c,d是一个集合的,a,b,e是一个集合,所以再合并这两个集合:
这样所有的点都归到一个集合里,生成了最小生成树。
Prim算法
模板:
https://blog.csdn.net/vvvzcs/article/details/74538525
https://blog.csdn.net/Fantasy_World/article/details/82935604
算法描述:
- 在一个加权连通图中,顶点集合V,边集合为E
- 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit.
- 重复以下操作,直到所有点都被标记为visit:
在剩下的点钟,计算与已标记visit点距离最小的点,标记visit,证明加入了最小生成树。
下面我们来看一个最小生成树生成的过程:
1 起初,从顶点a开始生成最小生成树
2 选择顶点a后,顶点啊置成visit(涂黑),计算周围与它连接的点的距离:
3 与之相连的点距离分别为7,6,4,选择C点距离最短,涂黑C,同时将这条边高亮加入最小生成树:
4 计算与a,c相连的点的距离(已经涂黑的点不计算),因为与a相连的已经计算过了,只需要计算与c相连的点,如果一个点与a,c都相连,那么它与a的距离之前已经计算过了,如果它与c的距离更近,则更新距离值,这里计算的是未涂黑的点距离涂黑的点的最近距离,很明显,b和a为7,b和c的距离为6,更新b和已访问的点集距离为6,而f,e和c的距离分别是8,9,所以还是涂黑b,高亮边bc:
5 接下来很明显,d距离b最短,将d涂黑,bd高亮:
6 f距离d为7,距离b为4,更新它的最短距离值是4,所以涂黑f,高亮bf:
7 最后只有e了:
最小生成树 Kruskal算法 Prim算法相关推荐
- 最小生成树 Kruskal 和 Prim算法及堆优化
目录 生成树/最小生成树是什么. 一.Kruskal算法 Kruskal模板 二.Prim算法及堆优化 1.遍历 Prim 普通模板 2.堆优化 Prim 堆优化模板 解决最小生成树的问题之前,我们先 ...
- 生成top图_最小生成树(Kruskal和Prim算法)
文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...
- prim算法_最小生成树(Kruskal和Prim算法)
文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...
- 【老生谈算法】matlab实现Kruskal避圈算法求最小生成树——Kruskal避圈算法
基于MATLAB的Kruskal避圈算法求最小生成树 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于MATLAB的Kruskal避 ...
- Java实现最小生成树算法(Prim算法)
Prim算法 Prim算法,每一步都会为一颗生长中的树添加一条边.一开始这棵树只有一个顶点,然后哦会向它添加V-1条边,每次总是将下一条连接树的顶点与不在树中且权重最小的边加入树中 实现 最小生成树的 ...
- 贪心算法prim算法
普利姆算法(Prim): 算法思想基于顶点选择,通过维护两个点集,已选点集S和未选点集T,每次选择从S集映射到T集的最小代价边,适用于稠密图. 图解dis更新过程: 最短路径求解时,dis更新的都是以 ...
- 最小生成树(Kruskal和Prim算法)
一.先再次明确关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称 ...
- 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)
一.基础知识 有向图 无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...
- 最小生成树构造算法--Prim算法,Kruskal算法(C语言)
最小生成树 最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构. 最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯 ...
- 最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题 acm寒假集训日记22/1/8
算法简讲部分: Kruskal算法: 基于贪心策略大致过程分为第三步:1. 我们先用结构体把每条边的端点和权值记录下来,然后对每条边按权值进行排序2. 因为 使图连通最少需要n-1 条边,所以我们依次 ...
最新文章
- 【c语言|Python】求一元二次方程ax^2+bx+c=0的根
- 【网络安全】文件上传绕过思路总结
- AJAX ASP/PHP 请求实例
- 数据采集提升性能篇-使用Mybatis的批量操作api导入数据
- 创建型模式——工厂模式
- 问答丨按量子力学来说,一个人撞墙,有多大概率能穿过去?
- 文件系统(01):基于SpringBoot框架,管理Excel和PDF文件类型
- 安装pytorch时,在安装 future-0.18.2.tar.gz (829 kB)时报错:ModuleNotFoundError: No module named ‘_ctypes’解决办法
- Python之socket(套接字)
- unity android 符号表,如何获取libunity.so的符号表
- Android绑定服务后出现空指针异常问题
- Cython应用手记
- Exchange DAG 架构 POP3验证失败处理过程
- vbs整人代码蓝屏_vbs整人代码
- C++获取硬件相关信息
- 平房误差函数_最小平方误差准则函数.ppt
- 没有百万调音师,用大数据+AI 也能让用户的声音更动听
- 二、Linux文件操作命令
- 关于esxtop命令下%RUN、%RDY和%MLMTD三个参数的详细解读
- error: src refspec master does not match any. 错误的解决办法
热门文章
- CentOS7.2下配置SOCKS5代理
- 根据压缩后的行列数和sourcemap反向定位源码
- js 把对象按照属性名的字母顺序进行排列
- 安卓开发1-质量管理app-技术预演
- 六、访问CGI变量 (基础教程6)
- github上传自己的项目
- android10手机众筹,最小Android 10手机?屏幕仅3英寸的Jelly 2开始众筹
- matlab中离散数值求解器在哪,matlab - 在ode MATLAB求解器上使用中间值 - SO中文参考 - www.soinside.com...
- CCF201312-2 ISBN号码
- 我们在程序员节组织了一场游戏,竟还用Python去验证其公平性?