【MATLAB】最短路径Floyd算法 您所在的位置:网站首页 最短路径问题原理 【MATLAB】最短路径Floyd算法

【MATLAB】最短路径Floyd算法

2023-08-14 17:20| 来源: 网络整理| 查看: 265

目录 1.Floyed算法1.1适用范围1.2算法思想1.3实例 2.代码2.1floyd函数2.2调用函数

1.Floyed算法 1.1适用范围

∙ \bullet ∙ 求每队顶点的最短路径

∙ \bullet ∙ 有向图、无向图和混合图

1.2算法思想

直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1),D(2)…D(n)(每次加入一个点然后更新最短路径矩阵D),D(n)是图的最短距离矩阵,同时引入一个后继点矩阵path记录两点间的最短路径。

1.3实例

对于如下无向图: 在这里插入图片描述 我们可以得如下带权邻接矩阵: [ 0 7 9 i n f i n f 14 7 0 10 15 i n f i n f 9 10 0 11 i n f 2 i n f 15 11 0 6 i n f i n f i n f i n f 6 0 9 14 i n f 2 i n f 9 0 ] \begin{bmatrix} 0 & 7 & 9 & inf & inf & 14\\ 7 & 0 & 10 &15 & inf & inf\\ 9 & 10 & 0 & 11 & inf & 2\\ inf & 15 & 11 & 0 & 6 & inf\\ inf & inf & inf & 6 & 0 & 9\\ 14 & inf & 2 & inf & 9 & 0\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡​079infinf14​701015infinf​910011inf2​inf151106inf​infinfinf609​14inf2inf90​⎦⎥⎥⎥⎥⎥⎥⎤​

实现步骤:

∙ \bullet ∙ 变量:输入变量与输出变量

输入变量含义w矩阵带权邻接矩阵start初始点terminal终止点 输出变量含义D矩阵D(i,j)表示i到j的最短路径path矩阵path(i,j)表示i到j之间的最短路径上顶点i的后继点min1start与terminal之间的最短距离path1start与terminal之间的最短路径

∙ \bullet ∙ 赋初值:对所有的i、j, D ( i , j ) = w ( i , j ) , p a t h ( i , j ) = j , k = 1 ( k 表 示 加 入 的 顶 点 个 数 ) D(i,j)=w(i,j),path(i,j)=j,k=1(k表示加入的顶点个数) D(i,j)=w(i,j),path(i,j)=j,k=1(k表示加入的顶点个数)

∙ \bullet ∙ 更新D(i,j)、path(i,j),对于所有i、j,若 D ( i , k ) + D ( k , j ) < D ( i , j ) D(i,k)+D(k,j)6

∙ \bullet ∙ 接着我们就要找 path(6,5)=5,到达终点,所以最终路径为1->3->6->5

注意:调用floyd函数的时候,同时还会输出每次插入一个顶点之后D矩阵和path矩阵的变化。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有