求两顶点间最短路和次短路算法以及matlab程序详解

#################本文为学习《图论算法及其MATLAB实现》的学习笔记#################

算法用途

计算图中两顶点间的最短路与次短路,并且它们至少有一条边或弧互异。

算法思想

首先,利用前面的算法求出从S到T的最短路,不妨设此最短路包含n0。条有向弧;然后,每次删去原权值矩阵W中最短路中的边(或有向边),从而得到n0个矩阵与W只有一个元素差别的新权值矩阵,并对这n0个权值矩阵分别求出一条从S到T的最短路,由这n0条最短路中选权值最短的,这样所得到的路就被称为所求出的从S到T的这条最短路的次短路。

程序参数说明

W: 图的权值矩阵 
p1,p2: 最短路与次短路
d1,d2: 表示p1,p2的长度

算法程序详解

其中调用的f_path()函数详情

%两顶点间最短路和次短路
function [ p1,p2,d1,d2 ] = shorp2f( W )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% 输入:         W: 图的权值矩阵 
%%%%%%%%% 输出:     p1,p2: 最短路与次短路
%%%%%%%%%            d1,d2: 表示p1,p2的长度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[p1, d1] = f_path(W);   % 求出一条最短路
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, d] = f_path(A);      % 重新计算最短路
    if d < d2                 % 若删去一条边后仍存在最短路
        d2 = d;               % 则此通路为次短路
        p2 = m1;
    end
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值