Алгоритм нахождения кратчайших путей от заданной вершины х0

до любой вершины графа (алгоритм Дейкстры)

 

 

Для решения задачи о кратчайшем пути разработаны различные алгоритмы. Рассмотрим один из них - алгоритм Дейкстры.

1)каждой вершине i ставим в соответствие число li  по правилу

x0->l0=0,остальным xi->li=D0 -большое число

2) находим дугу u=(xi,xj), для которой lj-li>l(xi,xj)

 

Рисунок 7. Иллюстрация алгоритма

 

3) заменяем lj новым значением

lj->lj=li+l(xi,xj), которое будет меньше чем lj. Заметим, что lj>0 для всех j<>0.

 Делаем так до тех пор, пока будет  находится дуга, для которой можно уменьшить lj.

4)    если для каждой u=(xi,xj) lj-li<=l(xi,xj), то процесс закончен и lk будут кратчайшими расстояниями от x0 до xk.

5)     если нужно найти кратчайшее расстояние между всеми парами вершин графа, то достаточно n-кратного применения алгоритма, выбирая все xi.

Алгоритм Дейкстры, записанный на ШАЯ, имеет вид

алг кратчайшее( цел N,M,X0,вещ таб X[1:M],Y[1:M],L[1:M],D[1:M])

N-число вершин

M-число дуг

Х0-начальная вершина

X,Y-номера вершин, связывающих дуги

L-длина дуги

D-кратчайшее расстояние

арг N,M,X,Y,L,X0

рез D

начало цел i,j,k,r

k=1;

пока k<=N

нц

D[k]=100000;k=k+1;кц

D[X0]=0;

M1:k=0;r=1;

пока r<=M

нц

i=X[r];j=Y[r];

если D[j]-D[i]>L[r] то

D[j]=D[i]+L[r];k=1 все

r=r+1;

если k>0то k=0;r=1; на M1 все

кц

конец