6.4.2_3最短路径问题_Floyd算法

Floyd弗洛伊德

膜拜大佬,给大佬鞠躬鞠躬鞠躬。。。。。。。。。

Floyd算法 ----解决顶点间的最短路径:

过程:

如下:

初始化(没有中转点):2个邻接矩阵A和path,第一个是没有中转点的2个顶点之间的最短路径(注意是2个顶点之间的直接路径,中间没有经过其他顶点,如果2个顶点比如A->B没有直接路径,A->C->B有路径,此时也写∞),第2个是目前能找到的最短路径中2个顶点之间的中转点,刚开始没有中转点所以各2个顶点之间的中转点都设为-1

中转点加入V0顶点:在没有加入V0中转点时,A[2][1]即V2->V1路径长度根据A邻接矩阵知是∞,加入V0后即K=0,可以V2->V0,V0->V1,即A[2][0]+A[0][1]=5+6=11(根据A第一个邻接矩阵得出)得出加了中转点后V2->V1最短路径由∞变为11,则修改A[2][1]即第一个邻接矩阵V2->V1最短路径为11,修改第二个邻接矩阵V2->V1中转点为0,所有的顶点都需要加入以上判断,然后修改A和Path,目前看只有V2、V1顶点需要(A(0)[2][1]=11即加入了0号中转点的V2->V1的最短路径长度为11,path(0)[2][1]=0,即当前的V2->V1最短路径长度加入了0号中转点,每次都要判断未加入中转点的最小路径长度>加入了中转点之后的最小路径长度,只有满足这个式子才会修改A和Path)

中转点加入V1顶点:在没有加入V1中转点时,V0->V2路径长度是13,加入后V0->V1->V2即6+4=10,加入后值小满足规则条件A(0)[0][2]>A[0][0][1]+A(1)[1][2],修改A(1)[0][2]=10,path(1)[0][2]=1,其他顶点无需更改,加入中转点后路径没有变化

中转点加入V2顶点:在没有加入V2中转点时,V1->V0路径长度是10,加入后V1->V2->V0即4+5=9,加入后值小满足规则条件A(1)[1][2]>A(1)[1][2]+A(1)[2][0],修改A(2)[1][0]=9,path(2)[1][0]=2

path写的是中转点,把谁加入了中转点对应的path路径上的值就写谁,A写的是最短路径长度

经过n(顶点个数)轮中转之后得到A(n-1)path(n-1)

如下:由A(n-1)即A(2)得,V1->V2最短路径是4,由path(2)得V1->V2是-1,即V1->V2最短路径4没有经过中转点,即为V1->V2,V0->V2最短路径是10,由path(2)得V1->V2是1,即V0->V2最短路径10经过中转点1,即为V0->V1->V2即V0_V1_V2

代码如下: 

准备一个图的邻接矩阵A+path矩阵初始值都设为-1,开始每循环一次增加一个中转点,每增加一个中转点遍历一次A邻接矩阵(遍历行和列),看加了中转点之后的路径长度和不加谁小,如果加了小更新邻接矩阵A最短路径长度和path中转点

时间复杂度:要根据顶点个数遍历3次即O(|V³|)

空间复杂度:矩阵的存储空间行和列即O(|V²|)

5个顶点例子:

中转点V0:没有需要更新的

中转点V1:既然是V1作为中间点出现,那必然要找指向V1的点作为起点V2和从V1指出的点(此时不要直接看图,要看邻接矩阵)V3、V4,可得V1作为中间点、V2作为起点有2条路径,V2->V1->V3=1+1=2,但是V2->V3没有直接路径即∞,修改A(1)[2][3]=2,path(1)[2][3]=1,另一条V2->V1->V4=1+5=6,V2直接到V4=7,则修改A(1)[2][4]=6,path(1)[2][4]=1【修改对应path上的横纵坐标确定的值为1】

中转点V2:既然是V2作为中间点出现,那必然要找指向V2的点作为起点V0和从V2指出的点(直接看邻接矩A中V2作为横坐标V2所在行有值的点,不要看图!!!)即V1、V3(V2->V3在图中并没有直接指向,但是在邻接矩阵A中(2,3)=2,是因为上一步已经加入了中转点V1,V2->V3没有直接路径,但是可以V2->V1->V3=2有中转点路径,即在使用中转点V2时也使用了中转点V1的结果,在已经有了一个中转点的情况下计算某2个顶点最短路径时也要看邻接矩阵而不是看图上边的权值!!!)、V4,可得V2作为中间点、V0作为起点有3条路径,V0->V2->V1=1+1=2(邻接矩阵中V0->V2是1,V2->V1是1) <V0->V1是∞,修改A(2)[0][1]=2,path(2)[0][1]=2,另一条V0->V2->V4=1+6=8(注意不要看图上的权值,看邻接矩阵中的最短路径!!!否则就变成了1+7=8,邻接矩阵A上V0->V2=1,V2->V4=6即1+6=7),V0直接到V4=10,则修改A(2)[0][4]=8,path(2)[0][4]=2,另一条V0->V2->V3=1+2=3(邻接矩阵A上V0->V2=1,V2->V3=2即1+2=3) < V0->V3=∞,则修改A(2)[0][3]=3,path(2)[0][3]=2【修改对应path上的横纵坐标确定的值为2】

中转点V3:上同

中转点V4:上同

根据最终中转矩阵找路径:

如下为最终中转的A和path,找V0->V4路径,由A知V0->V4最短路径为4,由path知V0->V4中转点是3,再由A知V3->V4最短路径1,由path知V3->V4=-1即V3和V4之间没有中转点,再看V0->V3,由A知V0->V3最短路径3,由path知V0->V3=2级V0->V3中转点V2,即V0->V2->V3,看V0->V2,由A知V0->V2最短路径1,由path知V0->V2=-1即V0->V2没有中转点,再看V2->V3,由A知V2->V3最短路径2,由path知V2->V3=1即V2->V3有中转点V1,即V2->V1->V3,看V2->V1,由A知V2->V1最短路径1,由path知V2->V1=-1即V2->V1没有中转点,再看V1->V3,由A知V1->V3最短路径1,由path知V1->V3=-1即V1->V3没有中转点

V0->V3->V4  第一轮   V3->V4不动路径为1,看V0->V3有哪些中转点

V0->V2->V3->V4第二轮  V0->V2不动路径1、V3->V4不动路径1,看V2->V3有哪些中转点

V0->V2->V1->V3->V4第三轮  V0->V2、V2->V1、V1->V3、V3->V4不动路径1,各路径无中转点

练习:

弗洛伊德算法可解决带负权值,但不能解决带回路的负权值

  

知识回顾:

 

下次再见 

 

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

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

相关文章

uniapp|实现多端图片上传、拍照上传自定义插入水印内容及拖拽自定义水印位置,实现水印相机、图片下载保存等功能

本文以基础视角,详细讲解如何在uni-app中实现图片上传→水印动态编辑→图片下载的全流程功能。 目录 引言应用场景分析(社交媒体、内容保护、企业素材管理等)uniapp跨平台开发优势核心功能实现​图片上传模块多来源支持:相册选择(`uni.chooseImage`)与拍照(`sourceType:…

2021年认证杯SPSSPRO杯数学建模B题(第二阶段)依巴谷星表中的毕星团求解全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 B题 依巴谷星表中的毕星团 原题再现&#xff1a; 依巴谷卫星&#xff08;High Precision Parallax Collecting Satellite&#xff0c;缩写为 Hip-parcos&#xff09;&#xff0c;全称为“依巴谷高精度视差测量卫星”&#xff0c;是欧洲空间局发…

行为型:解释器模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的&#xff1a;针对某种语言并基于其语法特征创建一系列的表达式类&#xff08;包括终极表达式与非终极表达式&#xff09;​&#xff0c;利用树结构模式…

Redis分布式缓存核心架构全解析:持久化、高可用与分片实战

一、持久化机制&#xff1a;数据安全双引擎 1.1 RDB与AOF的架构设计 Redis通过RDB&#xff08;快照持久化&#xff09;和AOF&#xff08;日志持久化&#xff09;两大机制实现数据持久化。 • RDB架构&#xff1a;采用COW&#xff08;写时复制&#xff09;技术&#xff0c;主进程…

换脸视频FaceFusion3.1.0-附整合包

2025版最强换脸软件FaceFusion来了&#xff08;附整合包&#xff09;超变态的换脸教程 2025版最强换脸软件FaceFusion来了&#xff08;附整合包&#xff09;超变态的换脸教程 整合包地址&#xff1a; 「Facefusion_V3.1.0」 链接&#xff1a;https://pan.quark.cn/s/f71601a920…

论文阅读笔记——Step1X-Edit: A Practical Framework for General Image Editing

Step1X-Edit 论文 当前图像编辑数据集规模小&#xff0c;质量差&#xff0c;由此构建了如下数据构造管线。 高质量三元组数据&#xff08;源图像、编辑指令、目标图像&#xff09;。 主体添加与移除&#xff1a;使用 Florence-2 对专有数据集标注&#xff0c;然后使用 SAM2 进…

使用Python在PyCharm中进行交通工程数据分析的完整流程,包括数据清洗、挖掘、关联、可视化和应用整合等各个阶段

交通工程领域数据分析流程 下面我将详细介绍使用Python在PyCharm中进行交通工程数据分析的完整流程,包括数据清洗、挖掘、关联、可视化和应用整合等各个阶段。 1. 数据准备与清洗 1.1 导入必要库 import pandas as pd import numpy as np import matplotlib.pyplot as plt…

《软件工程》第 2 章 -UML 与 RUP 统一过程

在软件工程领域&#xff0c;UML&#xff08;统一建模语言&#xff09;与 RUP&#xff08;统一过程&#xff09;是进行面向对象软件开发的重要工具和方法。接下来&#xff0c;我们将深入探讨第 2 章的内容&#xff0c;通过案例和代码&#xff0c;帮助大家理解和掌握相关知识。 …

Vue收集表单数据

在 Web 开发中&#xff0c;表单是用户与系统交互的重要方式。无论是注册、登录、提交评论还是其他操作&#xff0c;都需要通过表单获取用户输入的数据。Vue.js 提供了强大的响应式系统和指令&#xff0c;使得表单数据的收集变得简单而高效。本文将详细介绍如何在 Vue 中实现表单…

R基于多元线性回归模型实现汽车燃油效率预测及SHAP值解释项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 在全球环保意识日益增强和技术进步的推动下&#xff0c;汽车燃油效率成为了汽车行业关注的核心指标…

解决Window10上IP映射重启失效的问题

问题 在实际网络搭建过程中&#xff0c;大家有可能会遇到在局域网范围内&#xff0c;在自己本机上搭建一个网站或者应用时&#xff0c;其他设备通过本机的IP地址无法访问的问题,这个问题可以通过设置IP映射来解决&#xff0c;但是通过netsh interface命令设置的IP映射&#xf…

一台手机怎样实现多IP上网?方法有多种

在数字时代&#xff0c;多IP上网已成为许多手机用户的刚需。本文将详细介绍如何通过不同技术手段实现手机多IP上网&#xff0c;帮助读者根据实际需求选择适合的解决方案。 一、为什么一台手机要实现多IP上网 手机实现多IP上网的典型场景包括&#xff1a; ①防止同一IP操作多个…

git子模块--常见操作

克隆仓库 标准化克隆流程 基本命令git clone <父仓库远程URL> [本地文件名] cd <本地仓库名> git submodule init # 初始化子模块配置 git submodule update # 拉取子模块内容一次性完成克隆和初始化流程 基本命令git clone --recurse-submodules <父仓库远…

ceph 剔除 osd

剔除 osd 参考官网文档 Removing OSDs (Manual) Removing the OSD 你得周期性地维护集群的子系统、或解决某个失败域的问题(如一机架)。如果你不想在停机维护 OSD 时让 CRUSH 自动重均衡,提前设置 noout ceph osd set nooutid=1# OSD 通常在从集群中移除之前处于 up in 在…

MySQL推出全新Hypergraph优化器,正式进军OLAP领域!

在刚刚过去的 MySQL Summit 2025 大会上&#xff0c;Oracle 发布了一个用于 MySQL 的全新 Hypergraph&#xff08;超图&#xff09;优化器&#xff0c;能够为复杂的多表查询生成更好的执行计划&#xff0c;从而优化查询性能。 这个功能目前只在 MySQL HeatWave 云数据库中提供&…

破能所,入不二

一、缘起&#xff1a;从“闻所闻尽”到性相不二 《楞严经》观世音菩萨耳根圆通法门的核心教义——“初于闻中&#xff0c;入流亡所&#xff1b;所入既寂&#xff0c;动静二相&#xff0c;了然不生。如是渐增&#xff0c;闻所闻尽”&#xff0c;揭示了从凡夫二元认知跃升至究竟…

网站每天几点更新,更新频率是否影响网站收录

1. 每天几点更新网站最合适&#xff1f;总怕时间选错影响收录&#xff1f; 刚开始搞网站的时候&#xff0c;是不是老纠结啥时候更新合适&#xff1f;早上刚上班&#xff1f;半夜没人的时候&#xff1f;选不对时间&#xff0c;总担心搜索引擎爬虫来了没抓到新内容&#xff0c;影…

使用workvisual对库卡机器人进行程序备份

1&#xff0c;将电脑网卡设置自动获取&#xff0c;用网线将电脑与库卡机器人控制柜上的网口连接 2&#xff0c;打开软件后&#xff0c;会出现项目打开对话框&#xff0c;点击浏览按钮&#xff0c;会出现机器人站项目 3&#xff0c;点击项目前面的➕&#xff0c;展开菜单&…

2025.5.22 Axure 基础与线框图制作学习笔记

一、Axure 基础 - 界面及相关了解 界面布局 工具栏 &#xff1a;位于软件上方&#xff0c;包含新建、打开、保存等常用文件操作按钮&#xff0c;以及撤销、重做、剪切、复制、粘贴等编辑功能按钮&#xff0c;方便快速执行相关操作。 元件面板 &#xff1a;在左侧&#xff0c;提…

Python训练打卡Day36

复习日&#xff1a; 回顾神经网络的相关信息 1. 梯度下降的思想 梯度下降的本质是一种迭代优化算法&#xff0c;用于寻找函数的极小值点&#xff08;比如损失函数的最小值&#xff09;其关键的要素如下 梯度&#xff1a;函数在某点变化率最大方向学习率&#xff1a;每一步的…