Dijkstra算法是一种用于寻找图中两点间最短路径的算法。以下是一个基本的Dijkstra算法的MATLAB实现:
function [dist, path] = dijkstra(A, s)
% A: adjacency matrix
% s: starting node
% dist: shortest distance from s to all other nodes
% path: shortest path from s to all other nodes
n = size(A, 1);
dist = inf(1, n); dist(s) = 0;
prev = zeros(1, n);
Q = 1:n;
while ~isempty(Q)
[~, v] = min(dist + A(Q, Q));
for i = Q
if A(i, v) > 0 && dist(i) > dist(v) + A(i, v)
dist(i) = dist(v) + A(i, v);
prev(i) = v;
end
end
Q = setdiff(Q, v);
end
path = cell(1, n);
for i = 1:n
path{i} = [];
if dist(i) < inf
path{i} = [i];
while prev(path{i}(1)) > 0
path{i} = [prev(path{i}(1)), path{i}];
end
end
end
end
这个函数接受一个邻接矩阵A和一个起始节点s作为输入,并返回一个包含从s到所有其他节点的最短距离的向量dist和一个包含从s到所有其他节点的最短路径的单元数组path。这个函数使用一个优先队列Q来选择下一个最近的节点。在每次迭代中,它都会找到Q中最短路径的节点v,并更新从v出发的所有邻居节点的最短路径。最后,它通过回溯prev数组来构建每个节点的最短路径。