图论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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值