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