Floyd算法

Floyd算法

简介

1.概念

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

2.算法证明

IMAGE
可以看出,Floyd 算法本质是个区间 DP 问题
状态表示 : f[k][i][j] 表示 所有从 i 出发 最终走到 j 且只经过节点编号
不超过
k 的所有路径的最小值
阶段划分 : 节点编号 k 的不同
转移方程 : f[k][i][j]=min(f[k][i][j],f[k1][i][k]+f[k1][k][j])
通过 DP 背包思想 我们约掉了第一维 进而表示 Floyd

3.算法模板

void floyd()
{
    for(int k = 1; k <= n; k ++)//可以理解为中转点 
        for(int i = 1; i <= n; i ++)//起点
            for(int j = 1; j <= n; j ++)//终点
                g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
}

4.应用

IMAGE




例题

1.最短路问题

Floyd求最短路

2.传递闭包问题

传递闭包问题详解

3.找最小环问题

Floyd最小环问题

4.恰好经过k条边的最短路问题

类Floyd拓展问题

posted @   光風霽月  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示