[数学建模]数学建模算法和模型(B站视频)(五)
图论模型-Floyd算法
算法简介
Floyd算法的作用是求出一个图之间任意两点的最短距离,被认为是一个经典的动态规划。
算法原理
从任意节点i到任意节点j的最短路径不外乎2种可能——要么是直接从i到j,要么是从i经过若干个节点k到j。
所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离(这里用邻接矩阵表示图):
对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立——证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。
例题
代码
tulun2.m
a= [ 0,50,inf,40,25,10;
50,0,15,20,inf,25;
inf,15,0,10,20,inf;
40,20,10,0,10,25;
25,inf,20,10,0,55;
10,25,inf,25,55,0];
[D, path]=floyd(a)
floyd.m
function [D,path,min1,path1]=