图论01—最短路矩阵(FLOYD)算法

%========================================================

%最短路矩阵算法,FLOYD算法

%针对性:方案预算,能求出所有点之间的最短路(最小费用等)
%========================================================

function D=zuiduanjulijuzhen(quanzhijuzhen)

n=length(quanzhijuzhen);
D=quanzhijuzhen;
m=1;
while m<=n
    for i=1:n
        for j=1:n
            if D(i,j)>D(i,m)+D(m,j)
                D(i,j)=D(i,m)+D(m,j);
            end
        end
    end
    m=m+1;
end
D;

%========================================================
%评价:矩阵最短路算法,可以求所有点对点的最短距离,但有其缺点,
%就是没有给出具体路径,程序中D是最短距离矩阵

%========================================================

例:求下图中各个点之间的最短距离。

图论01—最短路矩阵(FLOYD)算法_第1张图片

解:(1)写权值矩阵

quanzhijuzhen =[   0     2     8     1   Inf   Inf   Inf   Inf

     2     0     6   Inf     1   Inf   Inf   Inf
     8     6     0     7     5     1     2   Inf
     1   Inf     7     0   Inf   Inf     9   Inf
   Inf     1     5   Inf     0     3   Inf     8
   Inf   Inf     1   Inf     3     0     4     6
   Inf   Inf     2     9   Inf     4     0     3
   Inf   Inf   Inf   Inf     8     6     3     0]

(2)带入程序

>> D=zuiduanjulijuzhen(quanzhijuzhen)
图论01—最短路矩阵(FLOYD)算法_第2张图片

说明:第1行表示点1与其他点的距离,同理i=2-8行表示i点与其他点的距离。


你可能感兴趣的:(MATLAB—图论基础)