Алгоритм нахождения кратчайших путей от заданной вершины х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 все кц конец
|
||