Задания № 13, 27 · ЕГЭ

Алгоритм Флойда

Поиск кратчайших расстояний между всеми парами вершин
2 мин чтенияСложность: Обновлено 29 сентября 2026

Алгоритм Флойда вычисляет длины кратчайших путей между всеми парами вершин взвешенного графа. Он работает с матрицей расстояний и последовательно разрешает использовать всё больше промежуточных вершин.

Алгоритм ФлойдаНазван в честь Роберта Флойда; независимую формулировку также предложил Стивен Уоршелл.
Алгоритм поиска кратчайших расстояний между всеми парами вершин взвешенного графа. Его также называют алгоритмом Флойда—Уоршелла. Для графа из \(n\) вершин он выполняет \(n\) шагов обработки промежуточных вершин и имеет сложность \(O(n^3)\).

Вначале строят таблицу кратчайших расстояний: на диагонали записывают \(0\), для непосредственного ребра — его вес, а при отсутствии ребра — условно бесконечность. Затем вершины по очереди становятся разрешёнными промежуточными вершинами.

\[d_{ij}^{(k)}=\min\left(d_{ij}^{(k-1)},\ d_{ik}^{(k-1)}+d_{kj}^{(k-1)}\right)\]1

Здесь \(d_{ij}^{(k)}\) — кратчайшее расстояние из вершины \(i\) в вершину \(j\), если в качестве промежуточных разрешены первые \(k\) вершин. На каждом шаге проверяется: выгоднее оставить прежний путь или пройти через вершину \(k\).

№
Короткий пример

Пусть прямой путь из \(A\) в \(C\) имеет длину \(10\), а рёбра \(A\to B\) и \(B\to C\) имеют длины \(3\) и \(4\). Когда \(B\) рассматривается как промежуточная вершина, алгоритм сравнивает \(10\) и \(3+4\) и записывает \(d(A,C)=7\). Так постепенно уточняются расстояния для всех пар.

!
Не путайте с алгоритмом Дейкстры

Кратчайший путь от одной вершины ко всем остальным обычно ищут алгоритмом Дейкстры. Алгоритм Флойда сразу решает задачу для всех пар, но требует \(O(n^3)\) операций. Он допускает отрицательные веса рёбер, если в графе нет цикла отрицательного веса.

Проверка

Что сравнивается на каждом шаге алгоритма Флойда?

Главное за минуту

Главное

  • Алгоритм Флойда находит расстояния между всеми парами вершин.
  • Основа метода — обновление \(d_{ij}=\min(d_{ij},d_{ik}+d_{kj})\).
  • Сложность равна \(O(n^3)\); отрицательные рёбра допустимы при отсутствии отрицательных циклов.