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

 вершин графа (алгоритм Флойда)

 
 

Пусть задан граф G=(X,U) и каждой дуге сопоставлена длина, U-множество дуг  l(xi,xj)>0.

Шаг 1.

Если между вершинами дуги нет, то вводят фиктивную дугу с l(xi,xj)=M0-большое число и строим матрицу

C0=(Cij) n*n-размерностью

   Cij=  0, для i=j

         l(xi,xj),если имеется дуга  (xi,xj)

         M0,если дуги нет

Идея алгоритма состоит в уточнении на каждом шаге xi и xj вдоль пути, проходящего через вершину xk. Если Cik+Ckj<Cij, то в качестве нового расстояния берется Sij=Cik+Ckj. Рис.

Алгоритм Флойда состоит из n-шагов, выполненных для каждого k. k=1,2,...n. После k-ой итерации элемент Ck матрицы будет  представлять длины кратчайших путей между каждой парой вершин, проходящих только через вершины множества {x1,...xk}.

Шаг 2.

k=1

i,j<>k вычисляем новое Cij=min{Cij,Cik+Ckj}

k=k+1

если k<=n, то переход вверх

Если k>n, то переходим вниз.

После окончания расчета мы получаем матрицу Sn, каждый элемент которой дает кратчайшее расстояние между соответствующей парой вершин.

алг Флойда( цел N, вещ таб C[1:N,1:N])

арг N,C

rez C

начало

цел i,j,k

k=1;

пока k<=N

нц

i=1;

пока i<=N

нц

j=1;

пока j<=N

нц

если C[i,j]>C[i,k]+C[k<j],то C[i,j]=C[i,k]+C[k,j] все

j=j+1;кц

i=i+1;кц

k=k+1;кц

конец