Алгоритм Беллмана — Форда: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
карточка
м ё
Строка 40:
'''return''' <math>d</math>
 
Здесь ''V'' — множество вершин графа ''G'', ''E'' — множество его рёбер, а ''w'' — весовая функция, заданная на ребрахрёбрах графа (возвращает длину [[Дуга (теория графов)#.D0.B4.D1.83.D0.B3.D0.B0|дуги]], ведущей из вершины ''u'' в ''v''), d — массив, содержащий расстояния от вершины s до любой другой вершины.
 
Внешний цикл выполняется <math>|V| - 1</math> раз, поскольку кратчайший путь не может содержать большее число реберрёбер, иначе он будет содержать цикл, который точно можно выкинуть.
 
Вместо массива ''d'' можно хранить всю матрицу A, но это требует ''O(V²)'' памяти. Зато при этом можно вычислить и сами кратчайшие пути, а не только их длины. Для этого заведем матрицу ''P<sub>ij</sub>''.
Строка 60:
<math>P_{vi} \gets u</math>
 
После выполнения этого алгоритма элементы <math>A_{i, j}</math> содержат длины кратчайших путей от ''s'' до ''i'' с количеством реберрёбер ''j'', и из всех таких путей следует выбрать самый короткий. А сам кратчайший путь до вершины ''i'' с ''j'' ребрамирёбрами восстанавливается так:
 
'''while''' <math>j > 0</math>