Алгоритм Форда-Белмана (С++)
Рассмотрим орграф D = (V,X), где V={v1,…,vn}.
А л г о р и т м Форда – Беллмана
Данные: матрица весов С(D) орграфа D, начальная вершина s.
Результат: расстояния от вершины s до всех вершин орграфа D: D[v] = d(s,v), v  V.
1. Всем вершинам vV орграфа присвоим метку D[v] = csv. Вершине s присвоим метку D
2. Положим k=1.
3. Выберем произвольную вершину v V \ {s}.
4. Выберем произвольную вершину u V.
5. Положим D[v] = min (D[v], D + cuv).
6. Если вершина u пробежала еще не все множество вершин V, то выбрать среди оставшихся произвольную вершину и вернуться к шагу 5.
7. Если вершина v пробежала еще не все множество вершин V \ {s}, то выбрать среди оставшихся произвольную вершину и перейти к шагу 4.
8. Если k < n-2, то положить k=k+1 и вернуться к шагу 3, иначе ал-горитм заканчивает свою работу, полученные значения D[v] будут равны расстояниям d(s,v) в орграфе D.
Замечание. Дополнить описанный алгоритм шагами, позволяю-щими находить сам путь от вершины s до вершины v.
Отметим, что закончить вычисления можно, когда выполнение цикла по k не вызывает изменения ни одной из переменных D[v].
Алгоритм уже по шагам расписан - просто переводишь на нужный язык.
Для поиска самого пути:
1. Выбираем конечную вершину x[k] (k=0)
2. Пока x[k]!=s
4. Выбираем вершину xc смежную с x[k] для которой разница меток равна весу дуги (из матрицы C(D))
5. x[++k]=xc
6. к шагу 2
P.S. А разве алгоритм поиска пути во взвешаном графе не алгоритм Дейкстры?
В том-то и дело, что не получается написать программу
Люди,помогите пожалуйста!!!
Если в инете чуть чуть поискать:
спасибо конечно, но это немного не то. что мне надо
Гхм... Merlin дал ссылку на программную реализацию алгоритма, причем именно на C++. Чего еще-то надо?
Да, но мне бы хотелось, чтобы программа была полегче написана
Короче, как я понял, мне никто помочь в проге не хочет...