Dijkstra算法的实现

        Dijkstra算法是一种求解两点之间最短路径的算法,尽管求解的是特定两个端点的最短路径,但实际上该算法遍历了这两点“之间”的节点,即求出了起点到终点的最短路径后,也能求得起点到与终点之间节点的距离。故求解的数据量过大时,该算法可能速度稍慢,话不多说,直接上代码,这是我学习参考“七月是你的谎言”的文章《matlab实现dijkstra算法(.m文件可直接运行)》码出的,发现其代码稍微有点小瑕疵导致不能输出满意的结果,稍作改进,能够输出正确的结果。

clc,clear
%Dijkstra算法
tic
A=zeros(6);
A(1,2)=1;A(1,3)=2;
A(2,4)=6;A(2,5)=5;
A(3,4)=4;A(3,5)=3;
A(4,6)=7;
A(5,6)=8;
A(A==0)=inf;


%先求最短路径值
begin=1;%起点序号为1
ending=4;%终点序号为6
U=1:length(A);%未求出最短径路的集合

S=begin;%标记点集合S

U(U==begin)=[];%未标记点集合

next=ones(length(A),1)*(-1);%保证未相连的下一节点为负数

for j=1:size(A)
    if A(begin,j)~=inf;
    next(j)=begin;
    end
end

dis=A(begin,:);%起点到各点的距离

minpath=0;%此时起点到各点的最短路为0

%开始计算最短径路的值
while length(S)

输出的结果如图所示:

Dijkstra算法的实现_第1张图片

 

你可能感兴趣的:(算法)