求连通图最短距离矩阵的算法及其matlab程序详解

求连通图最短距离矩阵的算法及其matlab程序详解


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

求最短路径矩阵的算法,不仅可直接应用到运输网络的分析中,而且在图上最优选址类问题中应用也很重要。

  • 算法用途

连通赋权图最短距离矩阵的求法

  • 算法思想

首先,输入该赋权图的权值矩阵
W = ( d i j ) n × n W=(d_{ij})_{n×n} W=(dij)n×n
,然后,为了求出两点间的最短距离,可按照Dijkstra方法,只要反复使用迭代公式
d i j k = min ⁡ i , j , k ∈ { 1 , 2 , ⋅ ⋅ ⋅ , n } { d i j ( k − 1 ) , d i k ( k − 1 ) + d k j ( k − 1 ) } d_{ij}^{k}=\mathop{\min}_{i,j,k\in\{1,2,···,n\}} \{d^{(k-1)}_{ij},d^{(k-1)}_{ik}+d^{(k-1)}_{kj}\} dijk=mini,j,k{1,2,⋅⋅⋅n}{dij(k1),dik(k1)+dkj(k1)}
就可以得到结果,记为
D ( n ) = [ d 11 ( k ) ⋯ d 1 n ( n ) d 21 ( n ) ⋯ d 2 n ( n ) ⋮ ⋮ d n 1 ( n ) ⋯ d n n ( n ) ] D^{(n)}= \begin{bmatrix} d^{(k)}_{11} & \cdots & d^{(n)}_{1n} \\ d^{(n)}_{21} & \cdots & d^{(n)}_{2n} \\ \vdots & & \vdots \\ d^{(n)}_{n1} & \cdots & d^{(n)}_{nn} \end{bmatrix} D(n)= d11(k)d21(n)dn1(n)d1n(n)d2n(n)dnn(n)
其中 d i j ( n ) d^{(n)}_{ij} dij(n) 为从顶点 v i v_{i} vi 到顶点 v j v_{j} vj 的最短距离的计算结果,称 D ( n ) D^{(n)} D(n)最短距离矩阵。

  • 程序参数说明

W: 图的权值矩阵
D: 图的最短距离矩阵

  • 算法的matlab程序详解
function [ D ] = shortdf( W )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%% 连通图最短距离矩阵的算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% 输入:     W: 图的权值矩阵; 
%%%%%%%%% 输出:     D: 图的最短距离矩阵
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%连接图中各顶点最短距离计算,i.e.最短距离矩阵(无向图)
%两顶点间若不存在弧,为inf
n = length(W);      % 返回 W 的行数,即顶点数
D = W;
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值