龙空技术网

Floyd算法,最简单的最短路算法

黑猫编程 330

前言:

目前各位老铁们对“floyd算法论文”都比较关切,同学们都需要分析一些“floyd算法论文”的相关知识。那么小编在网络上网罗了一些有关“floyd算法论文””的相关知识,希望咱们能喜欢,我们一起来了解一下吧!

最短路径问题

最短路径问题:如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小。

单源最短路径问题:计算从源点到其他所有顶点的最短路径长度。

多源最短路径问题:计算从所有顶点到所有顶点的最短路径长度。

Floyd算法

Floyd-Warshall 算法:又称为插点法,是一种利用动态规划的思想求多源最短路径的算法。

图中可以有正权边或负权边,但是不能有负权回路。

算法思想:

g[a][b]:当前已知从 a 到 b 的最短路径长度。

状态定义g[k][i][j]:只能使用第1号到第k号点作为中间媒介时,点i到点j之间的最短路径长度。

初始条件:如果存在弧,g[0][i][j] = w(i, j) i到j弧的权值如果不存在弧,g[0][i][j] = INF

状态转移方程:g[k][i][j]=min(g[k−1][i][j],g[k−1][i][k]+g[k−1][k][j])

数组降维:g[i][j]=min(g[i][j],g[i][k]+g[k][j])

如果 g[1][3]>g[1][2]+g[2][3]

那么 g[1][3]=g[1][2]+g[2][3]

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]);

Floyed的时间复杂度是 O(N3​​)

算法图解

建立邻接矩阵

标签: #floyd算法论文 #matlab floyd最短路算法例题