dijkstra--matlab

无向:

有向:

function [min,path]=dijkstra(w,start,terminal)
n = size(w,1);
label(start) = 0;
f(start) = start;
for i=1:n
    if i~=start
        label(i)=inf;
    end,
end
s(1) = start;
u = start;
while length(s)<n
    for i=1:n
        ins = 0;
        for j = 1:length(s)
            if i==s(j)
                ins=1;
            end,
        end
        if ins == 0
            v = i;
            if  label(v)>(label(u)+w(u,v))
                label(v)=(label(u)+w(u,v));
            f(v) = u;
            end,
        end,
    end
v1 = 0;
    k=inf;
    for i = 1:n
        ins = 0;
        for j = 1:length(s)
            if i==s(j)
                ins=1;
            end,
        end
        if ins==0
            v = i;
            if  k>label(v)
                k=label(v);
                v1 = v;
            end,
        end,
    end
    s(length(s)+1) = v1;
    u=v1;
end
min=label(terminal);
path(1) = terminal;
i=1;
while path(i)~=start;
    path(i+1) =f(path(i));
    i=i+1;
end
path(i) = start;
L = length(path);
path = path(L:-1:1);

 

%测试数据
weight = [  0   2   8   1   Inf Inf Inf Inf Inf Inf Inf;
            2   0   6   Inf 1   Inf Inf Inf Inf Inf Inf;
            8   6   0   7   5   1   2   Inf Inf Inf Inf;
            1   Inf 7   0   Inf Inf 9   Inf Inf Inf Inf;
            Inf 1   5   Inf 0   3   Inf 2   9   Inf Inf;
            Inf Inf 1   Inf 3   0   4   Inf 6   Inf Inf;
            Inf Inf 2   9   Inf 4   0   Inf 3   1   Inf;
            Inf Inf Inf Inf 2   Inf Inf 0   7   Inf 9;
            Inf Inf Inf Inf 9   6   3   7   0   1   2;
            Inf Inf Inf Inf Inf Inf 1   Inf 1   0   4;
            Inf Inf Inf Inf Inf Inf Inf 9   2   4   0;];
>> [dis,path]=dijkstra(weight,1,11)
%结果
dis =

    13


path =

     1     2     5     6     3     7    10     9    11

B站:https://www.bilibili.com/video/av29474522/?p=6

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值