Dijkstra算法可以用于求出从给定节点到其他各个节点的最短路径(不可用于处理负权图),其基本思想是以从起点到当前节点的总路径最短为目的,逐个更新各个节点到起点的距离。
下面直接给出Matlab实现的Dijkstra算法
adjacent_M = input("请输入邻接矩阵(结点从1开始递增编号): ");
Distance = zeros(1,size(adjacent_M,1)); %用于存放从起点出发,到各个顶点的最短距离
Parent = zeros(1,size(adjacent_M,1)); %用于存放每个结点的父节点
Visited = zeros(1,size(adjacent_M,1)); %用于存放每个节点是否被访问的信息,初始化为0,如果被访问则设置为1
%初始化从起点到各个节点的距离
for i = 1:size(adjacent_M,1)
Distance(1,i) = inf;
end
%初始化最短路径中各个节点的父节点
for i = 1:size(adjacent_M,1)
Parent(1,i) = -1;
end
%初始化起点信息
startNode = input("请输入起点编号: ");
visited(1,startNode) = 1;
Distance(1,startNode) = 0;
Parent(1,startNode) = -2; %起点的父节点设置为-2
cur = startNode; %标记当前节点的指针
while 1
% 更新与当前节点相连的节点信息