【数据结构】图—弗洛伊德(Floyd)算法

这篇具有很好参考价值的文章主要介绍了【数据结构】图—弗洛伊德(Floyd)算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



前言

上文介绍了迪杰斯特拉(Dijkstra)算法,计算网图的某个源点到其余各个顶点的最短路径问题(边权值为非负值),本文介绍另一个求最短路径的算法——弗洛伊德算法,它是计算所有顶点到所有顶点的最短路径,其时间复杂度为 O ( n 3 ) O(n^3) O(n3),其算法相比Dijkstra算法更加简洁易懂。


算法思路

在迪杰斯特拉算法中,定义了两个一维数组int D[MAXVEX] int P[MAXVEX],D表示源点到其他顶点的最短路径和,P表示对应顶点的最小路径的前驱矩阵。

因为弗洛伊德算法中,以所有顶点为源点,因此应该定义为二维数组int D[MAXVEX][MAXVEX] int P[MAXVEX][MAXVEX],核心思路和迪杰斯特拉算法类似,从源点v到终点w,判断经过中转点k的路径是否比原来的路径更短。

例如下图中,A顶点B顶点在邻接矩阵中是10,如果经过C顶点中转,则路径和为 4 + 3 = 7 4+3 = 7 4+3=7,显然要比直接路径要短。

弗洛伊德算法,数据结构,算法,数据结构,图论

D [ v ] [ w ] = m i n { D [ v ] [ w ] , D [ v ] [ k ] + D [ k ] [ w ] } D[v][w] = min\{ D[v][w],\quad D[v][k] + D[k][w] \} D[v][w]=min{ D[v][w],D[v][k]+D[k][w]}

以某一顶点为中转点,遍历所有顶点为源点和终点,如果经过中转点更短,则将D中的相应位置更新。

以下面这个网图为例,观察一下具体是怎么计算的。文章来源地址https://www.toymoban.com/news/detail-521128.html

弗洛伊德算法,数据结构,算法,数据结构,图论

到了这里,关于【数据结构】图—弗洛伊德(Floyd)算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 弗洛伊德(Floyd's)算法—解决最短路径经典算法

    弗洛伊德算法(Floyd\\\'s algorithm)是一种用于解决图中最短路径问题的经典算法。由美国计算机科学家罗伯特·弗洛伊德于1962年提出,该算法通过动态规划的思想,在图中寻找任意两个节点之间的最短路径,具有广泛的应用。本文将详细介绍弗洛伊德算法的原理、实现细节以及应用

    2024年02月04日
    浏览(26)
  • 算法——弗洛伊德算法(Floyd-Warshall)(图论)(c++)

    (蒟蒻的第四篇文章,希望dalao勿喷) (希望没问题) 声明: 1.本人变量定义的名称很low 2.本人用的方法也很low 3.但我觉得文章应该不low  (盲目自信) 第四篇文章讲讲Floyd算法 Floyd算法是一种寻找最短路径的常见算法,其特点是: 短,好理解(虽然其他算法也挺好理解的

    2023年04月09日
    浏览(24)
  • 弗洛伊德(Floyd)算法求个顶点之间最短路径问题(详解+图解)

    具体来说,弗洛伊德算法通过求解所有点对之间的最短路径来实现。在算法开始时,我们假设图中的所有节点之间都是不联通的,即它们之间的距离为无穷大。然后,我们对图进行“松弛”操作,即尝试更新每个节点之间的距离估计值,以寻找更短的路径。具体来说,对于图

    2024年02月08日
    浏览(30)
  • 数据结构第13周 :( 迪杰斯特拉最短路径 + 弗洛伊德求最短路径 + 欧拉回路 + Invitation Cards)

    【问题描述】 在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题。 在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用的一种,是一种按照路径长度递增的次序产生最短路径的算法。 在本题中,读入一个有向图

    2024年02月13日
    浏览(24)
  • 最短路径——弗洛伊德算法

    对于这类最短路径问题,DIF算法也可以解决,只需要 定义一个二维数组 ,以 数组的横坐标作为有向网顶点的下标 , 循环n次 依次求解各个源点到其余顶点的最短路径, 时间复杂度为O(n^3) 。 由于弗洛伊德算法求解该问题的的时间复杂度同为O(n^3),而且 思路简单及代码实现

    2024年01月23日
    浏览(28)
  • 弗洛伊德循环查找算法-原理

    本文灵感来自哔哩哔哩视频  视频链接: 弗洛伊德循环查找算法 算法代码(java) 弗洛伊德循环查找算法中第二次相遇的地方就是循环的起始点,这个性质的证明是基于数学的原理。这是因为在第一次相遇时,慢指针 `slow` 和快指针 `fast` 已经处于同一个循环内。设链表起点到环

    2024年01月19日
    浏览(31)
  • 弗洛伊德算法(求最短路径)

    在一个加权图中,如果想找到各个顶点之间的最短路径,可以考虑使用弗洛伊德算法。 弗洛伊德算法既适用于无向加权图,也适用于有向加权图。使用弗洛伊德算法查找最短路径时,只允许环路的权值为负数,其它路径的权值必须为非负数,否则算法执行过程会出错。 弗洛

    2024年02月06日
    浏览(29)
  • 今天学习了弗洛伊德算法(floyed)

    我自己写的模板 嘿嘿 Dijkstra算法SPFA算法但是我知道还有这些,但是今天是周末哎,我有点不想学了,我今天学的是比较差劲的一个算法(但是它好像比较好记啊),改天再学其他比较好一点的算法加强自己 输入 输出 后言:提醒自己加权值是分题目来不同权值,不是像示例

    2024年02月11日
    浏览(24)
  • 力扣-202. 快乐数解析-弗洛伊德循环查找算法

    题目链接   使用代码测试一下每一代数字  可以发现 归纳一下这些简单数字就可以发现,对于任意一个非快乐数,最终会进入重复循环, ···不难发现,4即之后的结果就是新一轮循环。 那么我的第一个做法是检测4出现的次数 如果4出现次数超过两次, 那么就不是快乐数 感

    2024年01月20日
    浏览(27)
  • 【力扣热题100】287. 寻找重复数(弗洛伊德的乌龟和兔子方法)

    刷一道力扣热题100吧 难度中等 https://leetcode.cn/problems/find-the-duplicate-number/?envType=study-plan-v2envId=top-100-liked 一年半前做过这题,但是时间复杂度不够。现在重新学一下 主要是用到了弗洛伊德的乌龟和兔子方法 算法预览: 初始化 :从两个指针开始,“乌龟\\\"和\\\"兔子”,都指向第

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包