25 lines
818 B
Matlab
25 lines
818 B
Matlab
|
% Implementation of a simple version of the Dijkstra shortest path algorithm
|
||
|
% Returns the distances from a single vertex to all others, doesn't save the path
|
||
|
%
|
||
|
% INPUTS: adjacency matrix, adj (nxn), start node s (index between 1 and n)
|
||
|
% OUTPUTS: shortest path length from the start node to all other nodes, 1xn
|
||
|
%
|
||
|
% Note: Works for a weighted/directed graph.
|
||
|
% GB: last updated, September 28, 2012
|
||
|
|
||
|
function d = simpleDijkstra(adj,s)
|
||
|
|
||
|
n=length(adj);
|
||
|
d = inf*ones(1,n); % distance s-all nodes
|
||
|
d(s) = 0; % s-s distance
|
||
|
T = 1:n; % node set with shortest paths not found yet
|
||
|
|
||
|
while not(isempty(T))
|
||
|
[dmin,ind] = min(d(T));
|
||
|
for j=1:length(T)
|
||
|
if adj(T(ind),T(j))>0 && d(T(j))>d(T(ind))+adj(T(ind),T(j))
|
||
|
d(T(j))=d(T(ind))+adj(T(ind),T(j));
|
||
|
end
|
||
|
end
|
||
|
T = setdiff(T,T(ind));
|
||
|
end
|