1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
function [s,mark]=moore(L,dep,arv)
%MOORE Recherche du plus court chemin entre deux sommets d'un graphe
n=size(L,1);
% Initialisation
Sb=1:n;
Sb(dep)=[];
mark=L(dep,:);
while 1
[v,indj]=min(mark(Sb));
j=Sb(indj); % j sommet de marque provisoire minimale
Sb(indj)=[]; % on retire j de Sb
if isempty(Sb),break,end % si Sb est vide on arete
succ=find(L(j,:)~=inf & L(j,:)~=0); % liste des successeurs de j
A=intersect(succ,Sb); % intersection entre cette liste et Sb
if ~isempty(A) % si cette liste n'est pas vide
mark(A)=min(mark(A),mark(j)+L(j,A)); % on remet a jour les marques
end
end
s=mark(arv); |
Partager