From e109b670e2291da2457f8fe086efdb457c24f3de Mon Sep 17 00:00:00 2001 From: vlad Date: Thu, 16 Nov 2017 18:19:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20'=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D0=B5-=D0=B0?= =?UTF-8?q?=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=D1=8B-=D0=BD=D0=B0?= =?UTF-8?q?=D1=85=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F-=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D1=87=D0=B0=D0=B9=D1=88=D0=B8=D1=85-=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B5=D0=B9-=D0=B2=D0=BE-=D0=B2=D0=B7=D0=B2=D0=B5=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85-=D0=B3=D1=80=D0=B0=D1=84=D0=B0?= =?UTF-8?q?=D1=85.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...вые-алгоритмы-нахождения-кратчайших-путей-во-взвешенных-графах.md | 1 + 1 file changed, 1 insertion(+) diff --git a/базовые-алгоритмы-нахождения-кратчайших-путей-во-взвешенных-графах.md b/базовые-алгоритмы-нахождения-кратчайших-путей-во-взвешенных-графах.md index 9a3648f..958dda7 100644 --- a/базовые-алгоритмы-нахождения-кратчайших-путей-во-взвешенных-графах.md +++ b/базовые-алгоритмы-нахождения-кратчайших-путей-во-взвешенных-графах.md @@ -1,4 +1,5 @@ # Базовые алгоритмы нахождения кратчайших путей во взвешенных графах. +[Статья с хабра](https://habrahabr.ru/post/119158/) ## Алгоритм Флойда-Уоршелла Находит расстояние от каждой вершины до каждой за количество операций порядка **n^3**. Веса могут быть отрицательными, но у нас не может быть циклов с отрицательной суммой весов рёбер (иначе мы можем ходить по нему сколько душе угодно и каждый раз уменьшать сумму, так не интересно). В массиве d[0… n — 1][0… n — 1] на i-ой итерации будем хранить ответ на исходную задачу с ограничением на то, что в качестве «пересадочных» в пути мы будем использовать вершины с номером строго меньше i — 1 (вершины нумеруем с нуля). Пусть идёт i-ая итерация, и мы хотим обновить массив до i + 1-ой. Для этого для каждой пары вершин просто попытаемся взять в качестве пересадочной i — 1-ую вершину, и если это улучшает ответ, то так и оставим. Всего сделаем n + 1 итерацию, после её завершения в качестве «пересадочных» мы сможем использовать любую, и массив d будет являться ответом.