1. 程式人生 > >圖論01—最短路矩陣(FLOYD)演算法

圖論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是最短距離矩陣

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

例:求下圖中各個點之間的最短距離。

解:(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)

說明:第1行表示點1與其他點的距離,同理i=2-8行表示i點與其他點的距離。