Довідка та теорія
Алгоритм Беллмана-Форда знаходить найкоротшу відстань від одного вихідного вузла до кожного іншого вузла у зваженому орієнтованому графі, і працює навіть тоді, коли деякі ваги ребер від'ємні.
Релаксація ребра
Кожне ребро (u, v) з вагою w
багаторазово релаксується за правилом
dist[v] = min(dist[v], dist[u] + w(u, v)). Якщо
шлях через u коротший за поточну найкращу відому
відстань до v, ця відстань — і попередник
v — оновлюються.
Чому достатньо V−1 проходів
Найкоротший шлях, що не повторює вузлів, проходить не більше
ніж V−1 ребер. Кожен повний прохід по всіх
ребрах гарантує, що щонайменше ще одне ребро кожного
найкоротшого шляху стає остаточним, тож після
V−1 проходів усі найкоротші шляхи (за
відсутності від'ємного циклу) повністю поширені.
Додатковий V-й прохід
Виконання ще одного проходу після обов'язкових
V−1 перевіряє наявність від'ємних циклів: якщо
хоча б одна відстань усе ще може покращитися, у графі існує
від'ємний цикл, досяжний із джерела, і для його вузлів
найкоротший шлях не визначений.
Складність
Беллман-Форд працює за O(V·E) часу та
O(V) пам'яті. Це повільніше за
алгоритм Дейкстри (O((V+E) log V)), але,
на відміну від нього, Беллман-Форд толерує від'ємні ваги і
вміє виявляти від'ємні цикли — жадібний вибір Дейкстри
перестає працювати коректно, щойно з'являється від'ємне
ребро.