Все темы
100

Флойд-Уоршелл: все пары сразу

Tier 1Закрыто

Где применяется

1. Задача

Прошлый урок (Беллман-Форд, шаг 99) и Дейкстра (шаг 97) отвечают на один вопрос: как далеко от ОДНОГО стартового узла до всех остальных? Один запуск даёт одну строку расстояний.

Иногда нужна вся таблица: расстояние от каждого места до каждого другого. Например, у курьерского склада 40 точек, где забирают посылки. Склад хочет знать цену пути между любыми двумя точками, чтобы по запросу сразу строить любой маршрут. Стартовых точек здесь n, и ответ это сетка n на n.

Можно запустить Дейкстру по разу из каждого узла. Флойд-Уоршелл заполняет всю сетку одним коротким тройным циклом (три цикла, вложенные друг в друга). Код остаётся простым, когда граф маленький и плотный, то есть рёбер в нём много.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

На LeetCode

Задачи, где нужно кратчайшее расстояние между каждой парой вершин или ответ, кто до кого может дойти, на графе из нескольких сотен вершин или меньше. Три вложенных цикла с промежуточной вершиной снаружи заполняют всю таблицу за n^3 шагов.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности