求两点间最短路的改进的Dijkstra算法

%% *********求两点间最短路的改进的Dijkstra算法***********
% 输入: a表示图的邻接矩阵                                   //
% 输出: a表示所求最短路的距离矩阵                           //

%%
function a = dij2_m(a)

% 建立邻接矩阵,若不是邻接矩阵,则变为邻接矩阵
n = length(a);
for i =2:n
    for j= 1:(i-1)
        a(i,j) = a(j,i)
    end
end

for k = 1:(n-1)
    b = [1:(k-1),(k+1):n];
    kk = length(b);
    a_id = k;
    b1= [(k+1):n];
    kk1= length(b1);
   
    while kk>0
        for j=1:kk1
            te= a(k,a_id) + a(a_id,b1(j));
            if te<a(k,b1(j))
                a(k,b(j))=te;
            end
        end
        miid = 1;
        for j = 2:kk
            if a(k,b(j)) <a(k,b(miid))
                miid = j;
            end
        end
        a_id = b(miid);
        b = [b(1:(miid-1)),b((miid+1):kk)];
        kk = length(b);
        if a_id > k
            miid1= find(b1 == a_id);
            b1 = [b1(1:(miid1-1)) b1((miid1+1):kk1)];
            kk1 = length(b1);
        end
    end
    for j = (k+1):n
        a(j,k) = a(k,j);
    end
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值