Floyd算法
Floyd算法是求加权图最短路径的经典算法之一,利用了动态规划的思想解决。
算法描述
最短路径问题:
设有一加权图G,从G中某个顶点出发达到另一个顶点,所经过边的权值之和最小的路径,被称为最短路径。
Floyd算法是解决加权图(图可以是有向也可以是无向,可以存在负权)中任意两点之间的最单路径的一种算法。
基本思路:
- 通过Floyd算法计算最短路径时,图一般采用二维数组,邻接矩阵的形式进行存储。
- 首先对邻接矩阵进行初始化,在图G中, g [ i ] [ j g[i][j g[i][j]表示从顶点i到顶点j的直接路径(权值);若i和j不相邻,即无直接连线,则置 g [ i ] [ j ] = ∞ g[i][j]= ∞ g[i][j]=∞;且设 g [ i ] [ i ] = 0 g[i][i]=0 g[i][i]=0,即顶点i到顶点i的距离为0;
- 寻找最短距离的过程就是对邻接矩阵进行更新的过程:若从顶点i到顶点j经过顶点k,且 g [ i ] [ j ] > g [ i ] [ k ]