⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dij.m

📁 function [r_path, r_cost] = dijkstra(pathS, pathE, transmat) The Dijkstra s algorithm, Implemente
💻 M
字号:

function [r_path, r_cost] = dijkstra(pathS, pathE, transmat)
% The Dijkstra's algorithm, Implemented by Yi Wang, 2005
% This version support detecting _cyclic-paths_
%
%   pathS : the index of start node, indexing from 1
%   pathE : the index of end node, indexing from 1
% transmat: the transition matrix, or adjacent matrix
%

% Ensure the transition matrix is square
%
if ( size(transmat,1) ~= size(transmat,2) )
  error( 'detect_cycles:Dijkstra_SC', ...
         'transmat has different width and heights' );
end


% Initialization:
%  noOfNode     : nodes in the graph
%  parent(i)    : record the parent of node i
%  distance(i)  : the shortest distance from i to pathS
%  queue        : for width-first traveling of the graph
noOfNode = size(transmat, 1);

for i = 1:noOfNode
  parent(i) = 0;
  distance(i) = Inf;
end

queue = [];


% Start from pathS
%
for i=1:noOfNode
  if transmat(pathS, i)~=Inf 
    distance(i) = transmat(pathS, i);
    parent(i)   = pathS;
    queue       = [queue i];
  end
end



% Width-first exploring the whole graph
%
while length(queue) ~= 0
  
  hopS  = queue(1);
  queue = queue(2:end);
  
  for hopE = 1:noOfNode
    if distance(hopE) > distance(hopS) + transmat(hopS,hopE)
      distance(hopE) = distance(hopS) + transmat(hopS,hopE);
      parent(hopE)   = hopS;
      queue          = [queue hopE];
    end
  end
  
end


% Back-trace the shortest-path
%
r_path = [pathE];    
i = parent(pathE);

while i~=pathS && i~=0
  r_path = [i r_path];
  i      = parent(i);
end

if i==pathS
  r_path = [i r_path];
else
  r_path = []
end
  

% Return cost
%
r_cost = distance(pathE);


  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -