图的最小生成树和最短路径算法思路总结(Prim,Kruskal,Dijkstra,Floyd)

带权无向图—>最小生成树算法—>Prim算法:

在这里插入图片描述

思路:
首先,我们先设置两个集合,U_{}:一个用来放最小生成树的顶点,T_{}:一个用来放最小生成树的边。选取最开始的点V_0,将V_0放入U_{}中,得到U_{V_0},然后从V_0出发的边中选权值最小的,把该边的另外一个点加入集合U中,把边加入集合T中,重复该操作,直到集合U中含图的全部点,最小生成树构造完毕。

代码如下:
Prim

带权无向图—>最小生成树算法—>Kruskal算法:

在这里插入图片描述

思路:
首先,我们先得到该图的最小生成树,只不过没有边,全部是点,然后按照边的权值从小到大排序,然后开始从小到大选边,只要不会让目前的最小生成树生成回路的边就可以选,最后形成完整的最小生成树。

代码如下:
Kruskal

带权有向图—>最短路径算法—>单源最短路径算法—>Dijkstra算法:

思路:
首先,我们先设置两个集合,U1_{}:一个用来放已找到最短路径的顶点,U2_{}:一个用来放当前还未找到最短路径的顶点。选取最开始的点V_0,将V_0放入U1_{}中,得到U1_{V_0},初始状态,集合U1中只有V_0,然后从U2_{}不断选取到V_0路径长度最短的点,将该点放入集合U1_{},U1_{}每次放入新点,都要修改顶点V_0到集合U2_{}剩余顶点的最短路径长度值,不断重复该过程,直到集合U2_{}中的点全部放入集合U1_{}中。

代码如下:
Dijkstra

带权有向图—>最短路径算法—>每对顶点之间的最短路径算法—>Floyd算法:

思路:
假设求从顶点vi到vj的最短路径。如果从vi到vj有弧,则从vi到vj存在一条长度为arcs[i][j]的路径,该路径不一定是最短路径,尚需进行n次试探。首先考虑路径(vi, v0, vj)是否存在(判别弧(vi, v0)和(v0, vj)是否存在)。如果存在,则比较(vi, vj)和(vi, v0, vj)的路径长度,取长度较短者为从vi到vj的中间顶点的序号不大于0的最短路径。假如在路径上再增加一个顶点v1,也就是说,如果(vi, …, v1)和(v1, …, vj)分别是当前找到的中间顶点的序号不大于0的最短路径,那么(vi, …, v1, … , vj)就有可能是从vi到vj的中间顶点的序号不大于1的最短路径。将它和已经得到的从vi到vj中间顶点序号不大于0的最短路径相比较,从中选出中间顶点的序号不大于1的最短路径之后,再增加一个顶点v2,继续进行试探,依此类推。在一般情况下,若(vi, …, vk)和(vk, …, vj)分别是从vi到vk和从vk到vj的中间顶点的序号不大于k-1的最短路径,则将(vi, …, vk, …, vj)和已经得到的从vi到vj且中间顶点序号不大于k-1的最短路径相比较,其长度较短者便是从vi到vj的中间顶点的序号不大于k的最短路径。这样,在经过n次比较后,最后求得的必是从vi到vj的最短路径。
按此方法,可以同时求得各对顶点间的最短路径。

代码如下:
Floyd

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

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

相关文章

玩转控件:对Dev的GridControl控件扩展

缘由一切实现来源于需求,目的在于不盲目造轮子,有小伙伴儿在看了《玩转控件:对Dev中GridControl控件的封装和扩展》文章后,私信作者说,因公司业务逻辑比较复杂,展示字段比较多,尤其网格列表控件展示数据太多…

二叉排序树(搜索树BST)-详解结点的删除

在二叉排序树中删除一个结点时,需保证删除后的二叉树仍然是二叉排序树。为讨论方便,假定被删除结点为p,其双亲结点为f。删除的过程可按下述的两种情况分别处理。 在这里我们用红色三角形表示我们要删除的结点,蓝色表示我们要改变指…

java调优方法,jvm监控工具

graph LR A-->B性能概述 程序性能表现形式 执行速度:程序响应速度,总耗时是否足够短内存分配:内存分配是否合理,是否过多消耗内存或者存在泄漏启动时间:程序运行到可以正常处理业务需要的时间负载承受能力 性能测…

那位五十多岁的创业者给我的启示!

作者:邹溪源,长沙资深互联网从业者,架构师社区特邀嘉宾!一我曾经提到过最终改行从事美缝行业的老w,他靠自己的“不够努力”,最终离开了行业。但是,这个世界其实有点讽刺。在沉迷于安逸小日子的老…

平衡二叉树(AVL树)-详解平衡调整

平衡调整: (注意:平衡调整只是平衡调整,没有进行结点的插入) LL型调整: (带阴影的小框表示插入的结点) 代码如下: AVLNode *AVLTree::LL_Rotate(AVLNode *a) {AVLNode *b;b a->lchild;a->lchild b->rchild;b->rchild a;a->bf b-&g…

初识消息队列/RabbitMQ详解

欢迎大家阅读《朝夕Net社区技术专刊》我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!今天来给大家分享关于消息队列的内容&…

zookeeper理解

Zookeeper简介 Zookeeper的数据模型 层次化的目录结构,命名符合常规文件系统规范每个节点在zookeeper中叫做znode,并且有一个唯一的路径标识节点znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点Znode中的互刷可以有多个版本…

那些年,在MSRA实习过的女孩,现在都怎么样了?

编者按:我们用两周时间回访了五位在 MSRA 实习过的女孩,她们也都是当年“实习派”的主人公。我们本想在更长的时间维度下,看一看 MSRA 给予她们的改变。然而超乎预期的是,在她们身上,坚持的力量比改变更强。变与不变&a…

Zookeeper理解---ZAB协议

ZAB协议 Zookeeper并不是完全采用Paxos算法,而是使用了一种称为Zookeeper Atomic Broadcast(ZAB,Zookeeper原子消息广播协议)作为数据一致性的核心算法,依据此算法来实现分布式数据一致性的解决。他是一种特别为Zooke…

【最强VSCode】之管理MySql数据库

(梅花香自苦寒来)你没有看错,就是用VSCode来管理MySql数据库,我也是第一次听说,感谢群管理DX小伙伴,三人行必有我师焉。话不多说,直接开张,VSCode还是很不错的,以后多多分享插件吧。1、你平时是…

[Flags]标识的Enum不能使用Html.GetEnumSelectList方法

在使用Asp.Net Core MVC写程序时,对用户类型做了如下定义:namespace ManufacturingExecutionSystemCore.Enums {public enum UserType{[Description("无身份人员")][Display(Name "无身份人员")]UnidentifiedPerson0x00,[Descripti…

Zookeeper实践与应用- Canal

基于MySql BinLog的增量订阅和消费组件:Canal Cancal是阿里13年1月开源的一个基于MySql数据库Binlog实现的增量订阅和消费的组件。项目取名Canal取自管道的英文单词,流转的医生,是一个定位于基于MySql数据库Binlog增量日志来实现数据库镜像&…

你遇到的面试官是「伯乐」吗?

之前写了一篇应应聘者视角的「面试中要注意的点」,《聊聊面试的事(应聘方)》。这次再来一篇面试官视角的。如果你不是面试官,也没关系。所谓“知己知彼,方能百战百胜”,了解一下面试官在面试时的侧重点&…

记录一次线上超时异常查询

线上事故复盘 前言 前一次上线,当时正常,第二天发现有部分超时报警,最终发现应为Dubbo接口一次传输数据量太大导致线程虚拟内存占用 线上问题排查过程 报警邮件中查询到有一部分接口超时量激增,查询定位到某个Dubbo接口&#x…

没用过.gitignore还敢自称高级开发?

Git是跟踪项目中所有文件的好工具, 但是,您会希望在项目的整个生命周期中不要跟踪某些文件及其变更。系统文件(i.e. Mac系统的.Ds_Store)应用程序配置文件(i.e. app.config, .env)构建组件(i.e.…

支付价格计算中精度问题之double,float

前言 前段时间开发新的微信小程序,借此机会将老掉牙的支付模块重构,并且支持现金支付(之前都是虚拟币支付),在重构期间遇到计算上的一些精度问题,虽然数额影响非常小但是影响比较大,我觉得有必…

.net core 集成 sentry 进行异常报警

.net core 集成 sentry 进行异常报警IntroSentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端,客户端(目前客户端有 C#, Python, PHP, JavaScript, Ruby等多种语言)就嵌入在…

[Qt入门]QTableWidget控件创建

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//TableWidget控件//设置列数ui->tableWidget->setColumnCount(3);//设置水平表头ui->tableWidget->…

Zookeeper--Watcher机制源码剖析一

Watcher-- 数据变更通知 我们知道Zookeeper提供来分布式数据的订阅/发布功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某个主题对象,当这个被监听对象自身状态发生变化时候,会通知所有订阅…

.NET Core 3.1 的REST 和gRPC 性能测试

看到越南小哥 的github 上的Evaluating Performance of REST vs. gRPC , 使用的是.NET Core 3.0 , 今天我把它升级到.NET Core 3.1 同样做了一个测试,文章的结果和他的博客文章是一样的:https://dev.to/thangchung/performance-benchmark-grp…