圖論08—次短路的距離及路徑

%========================================================
%次短路中的次,是指退而求其次,其意義不言而喻,本程序用於實現次短路求解。
%========================================================
function ciduanlu(W)
clc
qidian=input('輸入起點:');
zhongdian=input('輸入終點:');
[p1 d1]=liangdianzuiduanlu(W,qidian,zhongdian);
D=d1;
P=p1;

n=length(p1);
d2=inf;
for i=1:(n-1)
    A=W;
    A(p1(i),p1(i+1))=inf;
    A(p1(i+1),p1(i))=inf;
    [m1 d1]=liangdianzuiduanlu(A,qidian,zhongdian);
    if d1<d2
        d2=d1;
        p2=m1;
    end
end

disp('最短路爲:');
p1=P
d1=D
disp('次短路爲:');
p2
d2
%========================================================
%評:缺點是隻給出了次短路,而一般需要求解k短路,k>=2。
%========================================================


例:求下圖中起點1,終點8,的最短路和次短路距離及路徑。


解:

(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)帶入程序(格式整理後輸出如下)

>> ciduanlu(quanzhijuzhen)

輸入起點:1
輸入終點:8
最短路爲:
p1 =
     1     2     5     8

d1 =
    11

次短路爲:
p2 =
     1     2     5     6     8

d2 =
    12

說明:最短路爲1->2->5->8,距離12.次短路1->2->5->6->8,距離12.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章