【图论】Floyd

算法-Floyd


前置知识
  • dp基础
  • 图论基础

思路

Floyd 是一种优秀的全源最短路算法。

它的执行过程类似于 dp,如下:

首先我们定义 d i j dij dij 为节点 i i i 到节点 j j j 的最短距离。

我们枚举中转节点 k k k,再枚举两个节点 i , j i,j i,j,显然得到转移方程 d i j = min ⁡ ( d i j , d i k + d k j ) dij=\min(dij,dik+dkj) dij=min(dij,dik+dkj)。

结束遍历后, d i j dij dij 即为答案。


算法参数
  • 时间复杂度: O ( n 3 ) O(n^3) O(n3)
  • 空间复杂度: O ( n 2 ) O(n^2) O(n2)

实现代码
cpp 复制代码
for (int k=1;k<=n;k++)
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			d[i][j]=min(d[i][j],d[i][k]+d[k][j]);

练习

注:在稀疏图中,Floyd 不如跑 n n n 遍 Dijkstra。但是 Floyd 其实是一种 ( min ⁡ , + ) (\min,+) (min,+) 的广义矩阵乘法,所以有时可以用于解决进阶问题。

相关推荐
动词ing16 分钟前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习30 分钟前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨1 小时前
基础数论总结
笔记·学习·算法
夜不会漫长2 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng3 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习
大熊背4 小时前
树莓派相机自动白平衡详解(四)
算法·树莓派·白平衡·isppipeline
一米阳光86614 小时前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
晚风醉蝶4 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
旖旎夜光4 小时前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
..Dauntless..4 小时前
【C++】继承——基类和派生类的配合
开发语言·c++·算法