Floyd-Warshall[弗洛依德]算法

【数据结构与算法 | 图篇】Floyd-Warshall算法(多源最短路径算法) Floyd-Warshall算法是一种在有向图或无向图中寻找所有顶点对之间的最短路径的动态规划算法。该算法可以处理带权重的边,并且能够正确处理负权重的边(但不包括负权重循环),不过它不能处理包含负权重循环的情况,因为这种情况下最短路径是没有定义的。 阅读详情
1.定义概览

Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。

2.算法原理

Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)

从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。

3.矩阵计算方法-十字交叉法

1.计算各个节点之间的最短距离,约束图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wDXZTab1-1603514062107)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p50)]

2.我们先将如图画成表格:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u32IXCmF-1603514062110)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p51)]

3.再将表格化成矩阵A,再创建一个二维数组Path,用于存放人意一对定点之间的最短路径Path

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERYFwDgx-1603514062112)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p52)]

4.实现流程算法步骤

第一轮:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBjDgRHS-1603514062116)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p55)]

第一轮十字交叉法之后获得的A结果集:

0123
005∞7
1∞042
23302
3∞∞10

第一轮十字交叉法之后获得的path结果集:

0123
0-1-1-1-1
1-1-1-1-1
2-1-1-1-1
3-1-1-1-1

第二轮:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkvWQt5S-1603514062117)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p54)]

第二轮十字交叉法之后获得的A结果集:

0123
00597
1∞042
23302
3∞∞10

第二轮十字交叉法之后获得的path结果集:

0123
0-1-11-1
1-1-1-1-1
2-1-1-1-1
3-1-1-1-1

第三轮:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5erjJ2c-1603514062118)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p57)]

第三轮十字交叉法之后获得的A结果集:

0123
00597
17042
23302
34410

第三轮十字交叉法之后获得的path结果集:

0123
0-1-11-1
12-1-1-1
2-1-1-1-1
322-1-1

第四轮:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiMHLPnW-1603514062118)(evernotecid://06AB9D19-4A7C-4B66-B580-5E2D6C5A08F1/appyinxiangcom/27093205/ENResource/p58)]

第四轮十字交叉法之后获得的A结果集:

0123
00587
16032
23302
34410

第四轮十字交叉法之后获得的path结果集:

0123
0-1-13-1
13-13-1
2-1-1-1-1
322-1-1
弗洛伊德算法(Floyd-Warshall) 弗洛伊德算法又名插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。弗洛伊德算法是一种在具有正或负边缘权重但没有负周期的加权图中找到最短路径的算法。算法的单个执行将找到所有顶点对之间的最短路径的长度(加权)。虽然它不返回路径本身的细节,但是可以通过对算法的简单修改来重建路径。该算法的版本也可用于查找关系R的传递闭包,或在加权图中所有顶点对之间的最宽路径。 阅读详情

相关推荐

(4-2)Bellman-Ford算法的局限性与改进

Floyd-Warshall算法利用动态规划的思想,通过迭代更新距离矩阵来逐步逼近所有节点对之间的最短路径,其核心思想是考虑中间节点,利用子问题的最优解来求解整个问题的最优解。

码农三叔 2294

图详解第六篇:多源最短路径--弗洛伊德(Floyd-Warshall)算法(完结篇)

多源最短路径--Floyd-Warshall算法

m0_70980326的博客 1万+

(4-1)Bellman-Ford算法的局限性与改进

Floyd-Warshall算法是一种用于解决所有节点对之间最短路径的动态规划算法,可以处理带权有向图或带权无向图,但不能处理带有负权环路的图。Floyd-Warshall算法的时间复杂度为O(n3),其中n是图中节点的数量。在本章的内容中,将详细讲解Floyd-Warshall算法在路径规划中的用法,展示其在现实常用领域中的应用过程。

码农三叔 1320

最短路算法——Floyd-Warshall

在更多的应用场景中,需要用不同的算法来解决。下表总结了一些经典算法,除了贪心最优搜索之外,其他都是最优性算法,即得到的解是最短路径。表中的 m 是边的数量,n 是点的数量。 一、BFS BFS 也是一种很不错的最短路算法。但 BFS 只适合一种场景:任意的相邻两点之间距离相等,一般把这个距离看成 1,称为“1跳”,从起点到终点的路径长度就是多少个“跳数”。在这种场景下,查找一个起点到一个终点的最有短距离,BFS 是最优的最短路径算法,计算复杂度是 O(n),n 是图上点的...

指北针_N的博客 6890

FISCO-BCOS配置及使用控制台

如果因为网络问题长时间无法下载,请尝试:curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh。为了可以更加方便快捷,所以HelloWorld合约已经被内置了,位于控制台下面的contracts/solidity/HelloWorld.sol。用于获取和设置name的值,合约代码如下。部署成功会返回合约地址。

qq_51562644的博客 831

Windows域账户无管理员权限也能装软件?3步搞定UAC设置(附安全提醒)

本文探讨了在Windows域环境中,如何通过配置用户账户控制(UAC)实现临时提权,让无管理员权限的域账户也能安装软件。文章详细介绍了三步走策略:临时加入本地管理员组、调整UAC行为以及至关重要的权限回收,并提供了脚本化部署方案与安全实践指南,旨在平衡企业IT管理的效率与安全。

fox11的博客 756

【智能算法】Floyd-Warshall算法

Floyd-Warshall算法由Robert Floyd于1962年提出,并以其名字命名。该算法能够处理有向图或带有权重的无向图,并能够处理图中存在负权边的情况(但不包括负权重循环)。它的时间复杂度为O(V^3),其中V是图中节点的数量,因此适用于节点数量不是特别大的图。

大雨淅淅的博客 2732

STM32+OpenCV云台PID调参实战:从震荡到丝滑跟踪的进阶之路

本文详细介绍了基于STM32和OpenCV的跟踪云台PID调参实战经验。从硬件搭建、PID控制原理到调参技巧,系统讲解了如何通过调整比例、积分和微分参数解决系统震荡问题,实现从震荡到丝滑跟踪的进阶过程,特别适合电赛和嵌入式视觉控制开发者参考。

tgb3456789的博客 715

Floyd-Warshall算法

Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。 Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 原理 Floyd-Warshall算法的原理是动态规划。 设Di,j,k为从i到j的只以(1..k)集合中的节点为中间节点的最短路径的长度。

rqc112233的专栏 966

MATLAB/Simulink与ThingSpeak集成:打通物联网数据与工业算法仿真的闭环

在工业算法开发与控制系统设计中,模型仿真与真实世界数据的脱节是常见的工程挑战。其核心原理在于构建一个双向数据流闭环,将虚拟的仿真模型与物理世界的传感器网络连接起来。这一技术方案的核心价值在于大幅缩短算法迭代周期,实现数据驱动的设计与验证。典型的应用场景包括数字孪生构建、预测性维护和硬件在环(HIL)测试的云端化。通过将MATLAB/Simulink这一强大的模型化设计环境,与ThingSpeak物联网云平台进行深度集成,工程师能够轻松地将实时或历史的物联网数据流直接注入仿真模型作为输入,同时将仿真结果实时回

weixin_34220179的博客 469

立创开源便携式多生理参数监护仪:基于STM32H743与ADS1292R的心电血氧体温监测系统设计

本文详细解析了基于STM32H743与ADS1292R的便携式多生理参数监护仪开源设计。项目集成了心电、血氧和体温监测功能,采用模块化硬件架构,并重点介绍了利用FIR滤波和Pan-Tompkins算法进行心电信号处理的核心技术。文章提供了完整的复刻指南与避坑要点,是学习医疗电子设备设计的优秀实践案例。

weixin_30600615的博客 327

C语言 最短路径 弗洛伊德(Floyd)算法

弗洛伊德算法是一种解决图中多源最短路径问题的算法,可以求出图中任意两个节点之间的最短路径长度。该算法的时间复杂度为,空间复杂度为。需要指出的是,虽然弗洛伊德算法能够解决任意两个节点之间的最短路径问题,但在某些情况下可能不是最优解。因此,在实际使用中,需要根据具体需求选择合适的算法。总之,弗洛伊德算法作为图论领域中的经典算法,其思想和方法都值得我们深入学习和掌握,以便能够更好地应对实际问题。

m0_73070900的博客 5270

使用MeshLab高效对齐3D模型:从OBJ导入到坐标修正全流程

本文详细介绍了使用MeshLab高效对齐3D模型的全流程,涵盖从OBJ导入、坐标修正到最终导出的核心步骤。通过将模型中心归位至坐标原点,并利用主轴对齐功能快速摆正模型,为后续的3D打印、体素化等处理奠定精确的几何基础。

weixin_29313423的博客 92

Floyd-Warshall 算法概述

Floyd-Warshall 算法

m0_65152384的博客 629

QEMU理解与分析系列(11):QEMU内存机制

在物理机上,CPU 对于内存的访问在保护模式下通过分段分页的形式实现。在该模式下,CPU 访问时使用的是虚拟地址,通过 MMU 映射到物理地址,将虚拟地址转换为物理地址才能访问实际的物理内存。同样的,虚拟机模拟的物理机同样需要有上述的机制,也需要有从虚拟地址到物理地址的转换。这里需要注意,模拟的物理机的物理地址本质上是 qemu 的虚拟地址。

swh547的博客 49

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3234

Floyd - Warshall(弗洛伊德算法)

简介:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 eg:暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费及方便计划旅程,小哼希望在出发前知道任意两个城市之...

yuewenyao的博客 6万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Floyd_Warshall算法详解及实现(多源最短路径)

Floyd_Warshall算法详解及实现

qq_44423388的博客 2514

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

floyd-warshall算法

算法distancepathoutputcini  Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。我们平时所见的Floyd算法的一般形式如下: 1 void Floyd(){ 2     int i,j,k; 3     for(k=1;kn;k++) 4         for(i=1;in;i++) 5

dxx_111的博客 3873

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最短路之Floyd-Warshall(10张图解)

基本思路:从1~n号所有顶点中转,求任意两点的最短路径,一句话概括就是,从 i号 顶点到 j号 顶点,只经过前 k号 点的最短路程(一种动态规划思想

IT OR 考公? 3747

Floyd-Warshall算法总结

Floyd-Warshall算法总结 Floyd算法计算出任意两节点间的最短距离 数模7.8钢管的铁路与运输

m0_59179752的博客 1555

图-弗洛伊德(FloydWarshall)算法详解(含全部代码)

目录 适用条件 基本操作函数 功能实现函数 测试使用图 算法讲解 初始化 迭代 弗洛伊德算法代码 全部代码 实验结果 最短路径算法比较 适用条件 图中可以有负权,但不能有负圈(圈中弧或边的权值之和小于0) 基本操作函数 InitGraph(Graph &G) 初始化函数 参数:图G 作用:初始化图的顶点表,邻接矩阵等 InsertNo...

关注网络安全、云原生安全 1万+

数据结构 —— FloydWarshall算法

数据结构 —— FloydWarshall算法

qq_67693066的博客 1960

【智能算法】弗洛伊德(Floyd-Warshall)算法

弗洛伊德(Floyd-Warshall)算法,又称弗洛伊德算法,是一种用于计算加权图中所有顶点对之间最短路径的动态规划算法。它由罗伯特·弗洛伊德(Robert Floyd)在1962年提出,并以他的名字命名,尽管该算法的基本思想在更早之前已被其他研究者如Bernard Roy和Stephen Warshall所提出。

大雨淅淅的博客 2397

弗洛伊德(Floyd)算法(C/C++)

弗洛伊德算法(Floyd's algorithm),又称为弗洛伊德-沃尔什算法(Floyd-Warshall algorithm),是一种用于在加权图中找到所有顶点对之间最短路径的算法。这个算法适用于有向图和无向图,并且可以处理负权重边,但不能处理负权重循环。

闻道有先后,术业有专攻 5940

Floyd算法求解各顶点之间最短路径问题

Floyd算法基于动态规划思想,通过一个二维数组记录从一个节点到另一个节点的最短路径长度。算法的核心思想是逐渐增加中间节点,如果在加入一个中间节点后能够获得更短的路径,则更新路径长度。Floyd算法,也称为Floyd-Warshall算法,是一种用于求解图中所有节点之间最短路径的算法。如图:这是一个有三个顶点的有向图,矩阵A存储了两点之间的最短距离,在初始状态下就是一个邻接矩阵;矩阵pre记录了两点之间的最短路径中,加入的中转顶点。的最短路径长度是10,从pre可以知道,从。这个路径路径中,加入了。

weixin_51780040的博客 6571
上一篇: Java算法实现之:查找常用字符
下一篇: 数据库中间件浅谈
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值