Dijkstra算法 MATLAB

MATLAB画路径图全部数据该链接是建模时所有的代码,包括最短路径的问题以及利用MATLAB画结点图的代码和数据

function [min,path] =dijkstra(w,start,terminal)

n=size(w,1);

label(start)=0;

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;

            iflabel(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);




////代码运用实现

clc

clear;

n = 130;

w = xlsread('TimedataC.xlsx');

M = max(max(w)) * n^2;

w = w + ((w == 0) - eye(130)) * M;

for i = 9:68

    for j = 1:2

        [min,path] =dijkstra(w,i,j);

        D(i-8,j) = min;

        len = length(path);

        for k = 1:len

            P(2 * (i - 9) + j,k)= path(1,k);

        end

    end

end

fprintf('DONE!');

xlswrite('C-D-Fshortesttime.xlsx',D);//结果最终体现,文档中对应的每个点之间最短距离
xlswrite('C-D-Ftimepass.xlsx',P);

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/chao_shine/article/details/79079395
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞