Обновить 'базовые-алгоритмы-нахождения-кратчайших-путей-во-взвешенных-графах.md'
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
# Базовые алгоритмы нахождения кратчайших путей во взвешенных графах.
|
# Базовые алгоритмы нахождения кратчайших путей во взвешенных графах.
|
||||||
|
[Статья с хабра](https://habrahabr.ru/post/119158/)
|
||||||
## Алгоритм Флойда-Уоршелла
|
## Алгоритм Флойда-Уоршелла
|
||||||
Находит расстояние от каждой вершины до каждой за количество операций порядка **n^3**. Веса могут быть отрицательными, но у нас не может быть циклов с отрицательной суммой весов рёбер (иначе мы можем ходить по нему сколько душе угодно и каждый раз уменьшать сумму, так не интересно).
|
Находит расстояние от каждой вершины до каждой за количество операций порядка **n^3**. Веса могут быть отрицательными, но у нас не может быть циклов с отрицательной суммой весов рёбер (иначе мы можем ходить по нему сколько душе угодно и каждый раз уменьшать сумму, так не интересно).
|
||||||
В массиве d[0… n — 1][0… n — 1] на i-ой итерации будем хранить ответ на исходную задачу с ограничением на то, что в качестве «пересадочных» в пути мы будем использовать вершины с номером строго меньше i — 1 (вершины нумеруем с нуля). Пусть идёт i-ая итерация, и мы хотим обновить массив до i + 1-ой. Для этого для каждой пары вершин просто попытаемся взять в качестве пересадочной i — 1-ую вершину, и если это улучшает ответ, то так и оставим. Всего сделаем n + 1 итерацию, после её завершения в качестве «пересадочных» мы сможем использовать любую, и массив d будет являться ответом.
|
В массиве d[0… n — 1][0… n — 1] на i-ой итерации будем хранить ответ на исходную задачу с ограничением на то, что в качестве «пересадочных» в пути мы будем использовать вершины с номером строго меньше i — 1 (вершины нумеруем с нуля). Пусть идёт i-ая итерация, и мы хотим обновить массив до i + 1-ой. Для этого для каждой пары вершин просто попытаемся взять в качестве пересадочной i — 1-ую вершину, и если это улучшает ответ, то так и оставим. Всего сделаем n + 1 итерацию, после её завершения в качестве «пересадочных» мы сможем использовать любую, и массив d будет являться ответом.
|
||||||
|
|||||||
Reference in New Issue
Block a user