Floyd 算法 求最短路

推荐阅读:最短路 - OI Wiki
练习题目:力扣 - 1334

简介:

  • 初始化:我们先把题目给的,两点直接相连的边的加入初始存在连接中。
  • 更新:然后每次只加入一个点对已有合法连接进行“拓展”更多的连接。
  • 结果:那么所有点加入后,即为整个图的连接状况。

定义一个数组 f[ k ][ a ][ b ],表示只允许经过结点 1 到 k,结点 a 到结点 a 的最短路长度。

f[ 0 ][ a ][ b ] 就是不经过任何点时,点 a 与点 b 之间的距离。题目给的所有两点的连接都存入。其余都初始化为无穷大(如:0x3f3f3f3f)

更新举例:
f[ 1 ][ a ][ b ] = min( f[ 1 ][ a ][ b ] , f[ 0 ][ a ][ 1 ] + f[ 0 ][ 1 ][ b ] );
对当前连接(k == 1)取最小值,而 k == 0我们刚才所有的都初始化好了。

板子:

//### 初始化 #####################################
//直接相连的边加入
//以及自己和自己
		for(auto& arr:edges){
            f[arr[0]+1][arr[1]+1] = min(arr[2],f[arr[0]+1][arr[1]+1]);//应对多条重边
            f[arr[1]+1][arr[0]+1] = min(arr[2],f[arr[1]+1][arr[0]+1]);
        }
        for(int a=1;a<=n;a++){
            f[a][a] = 0;
        }
        
//*** 动态规划来更新 ******************************
        for(int i=1;i<=n;i++){
            for(int a=1;a<=n;a++){
                for(int b=1;b<=n;b++){
                    f[i][a][b] = min(f[i-1][a][b],f[i-1][a][i]+f[i-1][i][b]);
                }
            }
        }

内存优化:

for(int i=1;i<=n;i++){
            for(int a=1;a<=n;a++){
                for(int b=1;b<=n;b++){
                    f[a][b] = min(f[a][b],f[a][i]+f[i][b]);
                }
            }
        }

证明:

在这里插入图片描述


核心就是:对于每个f[i][a][b]要的都是【 i 列最小 + i 行最小 】,而“在原地进行更改也不会改变最小值的值”。因为你永驻这一行这一列。而且是求和啊,肯定比这一行这一列的最小值要大的。

相关推荐

  1. folyd算法路径

    2024-07-19 05:24:03       39 阅读
  2. A*算法

    2024-07-19 05:24:03       31 阅读
  3. Dijkstra

    2024-07-19 05:24:03       91 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 05:24:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 05:24:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 05:24:03       58 阅读
  4. Python语言-面向对象

    2024-07-19 05:24:03       69 阅读

热门阅读

  1. 交易积累-OSC

    2024-07-19 05:24:03       20 阅读
  2. 【16】时间单位换算

    2024-07-19 05:24:03       17 阅读
  3. 10 - FFmpeg - 重采样 - SoftwareResampleExample

    2024-07-19 05:24:03       17 阅读
  4. npm install时报错 reason: connect ETIMEDOUT

    2024-07-19 05:24:03       15 阅读
  5. npm相关指令

    2024-07-19 05:24:03       22 阅读
  6. 【Unity】RPG2D龙城纷争(十四)存档系统

    2024-07-19 05:24:03       18 阅读
  7. 点的距离(C++)

    2024-07-19 05:24:03       19 阅读
  8. itextpdf 使用demo

    2024-07-19 05:24:03       26 阅读
  9. chatglm2-6b-prompt尝试

    2024-07-19 05:24:03       20 阅读
  10. IKM 外企常用

    2024-07-19 05:24:03       21 阅读
  11. Linux源码阅读笔记13-进程通信组件上

    2024-07-19 05:24:03       20 阅读
  12. 分布式唯一id的7种方案

    2024-07-19 05:24:03       24 阅读
  13. 编程中的智慧之设计模式三

    2024-07-19 05:24:03       21 阅读