6.4.2_3最短路径问题_Floyd算法

news2025/6/1 12:32:04

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.coloradmin.cn/o/2392643.html

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

相关文章

<PLC><socket><西门子>基于西门子S7-1200PLC,实现手机与PLC通讯(通过websocket转接)

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…

深度学习核心网络架构详解(续):从 Transformers 到生成模型

在上一篇文章中&#xff0c;我们详细介绍了卷积神经网络 (CNN)、循环神经网络 (RNN) 及其变体 LSTM 和 GRU。本文将继续探讨其他必须掌握的深度学习网络架构&#xff0c;包括 Transformers、生成对抗网络 (GAN)、自编码器 (Autoencoder) 以及强化学习基础。我们将深入讲解这些技…

AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡

AI智能混剪视频大模型开发方案&#xff1a;从文字到视频的自动化生成优雅草卓伊凡 引言&#xff1a;AI视频创作的未来已来 近年来&#xff0c;随着多模态大模型&#xff08;如Stable Diffusion、Sora、GPT-4&#xff09;的爆发式发展&#xff0c;AI已经能够实现从文字生成图像…

allWebPlugin中间件VLC专用版之截图功能介绍

背景 VLC控件原有接口具有视频截图方法&#xff0c;即video对象的takeSnapshot方法&#xff0c;但是该方法返回的是一个IPicture对象&#xff0c;不适合在谷歌等现代浏览器上使用。因此&#xff0c;本人增加一个新的视频截图方法takeSnapshot2B64方法&#xff0c;直接将视频截图…

Scratch节日 | 六一儿童节

六一儿童节到啦&#xff01;快来体验这款超简单又超好玩的 六一儿童节 小游戏吧&#xff01;只需要一只鼠标&#xff0c;就能尽情释放你的创意&#xff0c;绘出属于你自己的缤纷世界&#xff01; &#x1f3ae; 玩法介绍 鼠标滑动&#xff1a;在屏幕上随意滑动鼠标&#xff0c…

深度解析:跨学科论文 +“概念迁移表” 模板写作全流程

跨学科论文速通&#xff01;融合“概念迁移表”的写作导航模板 你的论文是否曾被导师皱眉评价为“四不像”&#xff1f;不同学科的术语在稿纸上打架&#xff0c;核心逻辑若隐若现&#xff1f; 别让心血沦为学术混搭的牺牲品。一张精心设计的 概念迁移表&#xff0c;能将两个看…

深度剖析Node.js的原理及事件方式

早些年就接触过Node.js&#xff0c;当时对于这个连接前后端框架就感到很特别。尤其是以独特的异步阻塞特性&#xff0c;重塑了了服务器端编程的范式。后来陆陆续续做了不少项目&#xff0c;通过实践对它或多或少增强了不少理解。今天&#xff0c;我试着将从将从原理层剖析其运行…

VScode-使用技巧-持续更新

一、Visual Studio Code - MACOS版本 复制当前行 shiftoption方向键⬇️ 同时复制多行 shiftoption 批量替换换行 在查找和替换面板中&#xff0c;你会看到一个 .∗ 图标&#xff08;表示启用正则表达式&#xff09;。确保这个选项被选中&#xff0c;因为我们需要使用正则…

主流 AI IDE 之一的 Windsurf 使用入门

一、Windsurf 的常见入门界面 以上是本次展示Windsurf版本信息。 1.1 个人配置中心 1.2 AI 助手快捷设置 1.3 使用额度查看页面 1.4 智能助手 Windsurf 编辑器中 AI 助手名称 &#xff1a;Cascade 。打开 Cascade 窗口&#xff0c;开始聊天就可以了。方框里有写和聊两种状态锁…

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱

背景与问题概述 这一周&#xff08;2025-05-26-2026-05-30&#xff09;我在搞数据拟合修复优化的任务&#xff0c;有大量的数据需要进行数据处理及回写&#xff0c;大概一个表一天一分区有五六千万数据&#xff0c;大约一百多列的字段。 具体是这样的我先取档案&#x…

历年南京理工大学计算机保研上机真题

2025南京理工大学计算机保研上机真题 2024南京理工大学计算机保研上机真题 2023南京理工大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 求阶乘 题目描述 给出一个数 n n n ( 1 ≤ n ≤ 13 ) (1 \leq n \leq 13) (1≤n≤13)&#xff0c;求出它…

Web前端常用面试题,九年程序人生 工作总结,Web开发必看

前端编程&#xff0c;JavaScript 从无知到觉醒 做 Web 开发&#xff0c;离不开 HTML&#xff0c;CSS&#xff0c;JavaScript&#xff0c;尽管日常工作以后台开发为主&#xff0c;但接触的多了&#xff0c;慢慢地理解深入&#xff0c;从只会使用 JS 写函数&#xff0c;发展到使用…

Rk3568驱动开发_设备树点亮LED_11

代码&#xff1a; #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/cdev.h…

多功能文档处理工具推荐

软件介绍 今天为大家介绍一款功能强大的文档编辑工具坤Tools&#xff0c;这是一款在吾爱论坛广受好评的办公软件。 软件背景 坤Tools是由吾爱论坛用户分享的软件&#xff0c;在论坛软件榜单上长期位居前列&#xff0c;获得了用户的一致好评。 软件性质 这是一款完全离线、…

【目标检测】【ICCV 2021】条件式DETR实现快速训练收敛

Conditional DETR for Fast Training Convergence 条件式DETR实现快速训练收敛 代码链接 论文链接 摘要 最近提出的DETR方法将Transformer编码器-解码器架构应用于目标检测领域&#xff0c;并取得了显著性能。本文针对其训练收敛速度慢这一关键问题&#xff0c;提出了一种条…

【工作笔记】 WSL开启报错

【工作笔记】 WSL开启报错 时间&#xff1a;2025年5月30日16:50:42 1.现象 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80370114 Error: 0x80370114 ??????????????????Press any key to continue...

VMware使用时出现的问题,此文章会不断更新分享使用过程中会出现的问题

VMware使用时出现的问题&#xff0c;此文章会不断更新分享使用过程中会出现的问题 一、VMware安装后没有虚拟网卡&#xff0c;VMnet1&#xff0c;VMnet8显示黄色三角警告 此文章会不断更新&#xff0c;分享VMware使用过程中出现的问题 如果没找到你的问题可以私信我 一、VMware…

深入解析Kafka JVM堆内存:优化策略与监控实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…

【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)

Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程 一、前言 1. 背景 众所周知&#xff0c;最新搭载澎湃OS和鸿蒙OS的平板都内置了PC级WPS&#xff0c;办公效率直接拉满&#xff08;板子终于从“泡面盖”升级为“生产力”了&#xff09;。但问题来了&#xff1a;如果不是这…

高频面试--redis

Reids 1. 常见的数据结构&#xff08;string, list, hash, set, zset&#xff09; 答法模板&#xff1a; Redis 提供五种核心数据结构&#xff1a; String&#xff1a;最基本的类型&#xff0c;支持整数、自增、自减、位操作。 List&#xff1a;双端链表&#xff0c;支持消息…