首页 > 编程语言 >全源最短路径——Floyd算法

全源最短路径——Floyd算法

时间:2024-02-01 22:35:46浏览次数:29  
标签:结点 遍历 全源 路径 算法 Floyd 相连

目录

问题引入

给出一个含有n个点,m条边的图,如何快速的给出任意两个点的最短路径

思路一览

这个,感觉没啥思路,可能能想到的最暴力的解法就是对每一个点进行dfs遍历,在遍历过程中更新,但是这样的做法肯定是时间复杂度爆炸的;因此还是老算法Floyd香,Floyd算法的有点递归的思想?感觉有点的,将a、b两个点的最短路径化为a和b的一个中继结点的最短路径的和,直到a、b结点直接相连

算法原理

像上面说的,两个点的最短路径有两种取法,一种是直接相连,一种是间接相连,即依靠其他点来更新最短距离;第一种好说,直接读入即可,但是借助跳板怎么实现呢,对于一条再长的路径,也可以看作是有限的直接相连的点的相连,这样可以得到一个状态转移方程,对于u、v和中继结点k,e[u][v] = min(e[u][v], e[u][k]+e[k][v]),因此遍历每一个结点成为中继结点即可

代码部分

    // cmp = (1<<30)
    // 没有直接相连的边的处理是memset(e, 127, sizeof 127);
    for(int k=1; k<=n; k++) {
        for(int u=1; u<=n; u++) {
            //这里做了两个小小的优化,可以优化部分情况
            if(e[u][k] < cmp) {
                for(int v=1; v<=n; v++) {
                    if(e[k][v] < cmp) {
                        e[u][v] = min(e[u][v], e[u][k]+e[k][v]);
                    }
                }
            }
        }
    }

标签:结点,遍历,全源,路径,算法,Floyd,相连
From: https://www.cnblogs.com/notalking569/p/18002261

相关文章

  • Python 机器学习 K-近邻算法 K值的选择
     1、选择说明K-近邻算法通过查找测试数据点的K个最近的邻居来进行预测。这些邻居的类别(对于分类问题)或值(对于回归问题)用于决定测试点的类别或值。K是一个正整数,通常较小。1)避免过小的K值K值过小可能会导致模型过于复杂,容易受到数据中噪声的影响,从而导致过拟合。避免在K-近邻......
  • 很好用的python游戏环境(续2):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个py
    相关前文:很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题navigation):分享一个python语言的迷宫游戏环境项目的GitHub地址:https://github.com/Wonz5130/Maze_AIPS.这个游戏有个非常严重且致命的error,那就是单击这个游戏界面的时候会自动转成AI执行,否则就是人......
  • 很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个pyt
    相关:很好用的python游戏环境:强化学习算法走迷宫游戏环境(导航问题navigation):分享一个python语言的迷宫游戏环境前文分享了一个python下的maze游戏环境,本文再给出一个不错的实现项目,这个项目的实现更加的简单,并且可视化界面做的很好看,是用tkinter框架做的可视化:相关:迷宫游戏p......
  • 代码随想录算法训练营第九天| 28. 实现 strStr() 459.重复的子字符串 字符串总结 双
     28.实现strStr()给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。题目链接:28.找出字符串中第一个匹配项的下标-力扣(LeetCode)思路:标......
  • 很好用的python游戏环境:强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个pyth
    项目的GitHub地址(作者:莫凡):https://github.com/MorvanZhou/mmaze运行的示例代码:importmmazestart=(0,0)end=(10,10)m=mmaze.generate(width=11,height=11,symmetry="horizontal")solutions=m.solve(start=start,end=end)m.plot(solution=solutions[0],......
  • 【算法】递推
    递推引入我们常常说的斐波那契数列大家肯定知道,一开始学OI时大多数人都是用循环来解决的(c=a+b,a=b,b=c)。但你有没有想过一点,斐波那契数列的公式是\(\begin{cases}\text{if}\1\lei\le2&f_i=1\\\text{if}\i\ge3&f_i=f_{i-1}+f_{i-2}\end{cas......
  • 探究HMAC算法:消息认证与数据完整性的完美结合
    Hash-basedMessageAuthenticationCode(基于哈希的消息认证码,简称HMAC)算法作为一种广泛应用的消息认证码(MAC)算法,在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面,全面介绍和解释HMAC算法。HMAC在线加密|一个覆盖广泛主题工具的高效在线平......
  • 洛谷二分题单和二分算法
    在题目有出现极值的时候可以运用二分算法,像最小值最大化和最大值最小化又或者像会有中位数,大于这个数的时候可以把他全部视为1小于这个数可以全部视为0,这样隐藏的单调也是可以运用二分。最难的好像就是check函数的设计板子的不同会导致L,R和mid的关系不然会超时,L+1<R的L是=mid,而L......
  • Klocwork 2023.4发布:问题匹配算法升级,编码标准全面支持!
    Klocwork2023.4的新增功能Klocwork2023.4改进了问题匹配的算法,为桌面端和CI集成构建之间的结果提供了更大的一致性,以及连续构建之间的问题匹配。Klocwork的最新版本还改进了C/C++语言的分析引擎,减少了误报/漏报,跨过程跟踪数组索引中的值和具有常量表达式的值。此外,还对IDE插......
  • 【学习笔记】二分图匹配 匈牙利(NTR)算法
    时间复杂度显然,这个算法的时间复杂度是O(一边的点数*边数)因为最坏情况就是每一个点都要把所有的边问一遍能不能匹配显然,常数极小另外可以留意一下数据范围,因为如果是稠密图(\(n=500m=2e5\)这种)就可以考虑邻接矩阵存图,方便判重边S准备以下是跑Ntr算法要用的一些东西如果题......