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