74 4. Пути в сетях
4.7. Задача о кратчайших путях между всеми
парами вершин
В предыдущих разделах этой главы рассматривались задачи нахож-
дения оптимальных в том или ином смысле путей от некоторой фикси-
рованной вершины до всех остальных вершин сети. Здесь мы рассмот-
рим задачу построения кратчайших путей между всеми парами вершин.
Под длиной пути, как и в разделах 4.1 – 4.4, мы понимаем сумму весов
дуг, образующих эт от путь. Ясно, что эту задачу можно решать, исполь-
зуя n раз (поочередно для каждой вершины) один из описанных ра нее
алгоритмов нахождения расстояний от фиксированной вершины. Таким
образом, мы получаем алгоритмы сложности O(n
4
) (при использовании
алгоритма Форда-Беллмана) и O(n
3
) для сетей с неотрицательными ве-
сами (алгоритм Дейкстры) или для бесконтурных сетей (алгоритм 4.4).
Однако, для общего случая сетей с произвольными весами имеются бо-
лее эффективные алгоритмы, чем метод, основанный на многократном
применении алго ритма Форда-Беллмана. Один из таких алгоритмов,
предложенный в 1962 году Флойдом, мы здесь и разберем.
Пусть сеть G = (V, E, c) задана матрицей весов A, где A[i, j] =
= c(v
i
, v
j
), и A[i, j] = ∞, если дуги (v
i
, v
j
) в сети нет. Обозначим через
d
k
(i, j) длину кратчайшего пути из v
i
в v
j
, все промежуточные вершины
которого содержатся в множестве v
1
, . . . , v
k
, т. е. содержатся в первых
k вершина х. Положим
d
0
(i, j) = A[i, j].
Пусть d
k
(i, j) вычислено при всех i, j = 1, ..., n и некотором k > 0.
Докажем равенство
d
k+1
(i, j) = min (d
k
(i, j), d
k
(i, k + 1) + d
k
(k + 1, j)). (3)
Действительно, рассмотрим кратчайший (v
i
, v
j
)-путь P с про межу-
точными вершинами из множества v
1
, . . . , v
k
, v
k+1
. Возможны две ситу-
ации: либо вершина v
k+1
входит в этот путь, либо нет.
Если вершина v
k+1
не входит в путь P , то, как легко видеть, спра-
ведливо равенство d
k+1
(i, j) = d
k
(i, j).
Если же вершина v
k+1
входит в путь P , то разбивая этот путь на
пути от v
i
до v
k+1
и от v
k+1
до v
i
, получаем два новых пути, все проме-
жуточные вершины которых входят во множество v
1
, . . . , v
k
. Посколь-
ку всякий подпуть кратчайшего пути сам является кратчайшим пу-
тем между соответствующими вершинами, то справедливо равенство