Использование алгоритма Беллмана-Форда: как правильно пройти каждое ребро?

Я делаю домашнюю задачу, где мне нужно запустить алгоритм Беллмана-Форда, начиная с вершины z. Он хочет, чтобы я «при каждом проходе ослаблял ребра в том же порядке, что и на рисунке, и показывал значения d и pi после каждого прохода». Насколько я понимаю, я думал, что этот алгоритм пересекает граф как BFS, что имеет смысл из рисунка, который они хотят, чтобы я использовал, поэтому я не вижу, как будет работать тот же путь. Если бы кто-нибудь мог указать мне в правильном направлении, указав, как начать, это было бы очень полезно. Вопрос и рисунок, к которому относится вопрос: введите здесь описание изображения

введите здесь описание изображения


person jfisk    schedule 27.11.2011    source источник
comment
после того, как вы посещаете списки смежности каждого узла, они выбирают следующий узел в алфавитном порядке и так далее. Это может быть то, что сбивает вас с толку   -  person    schedule 13.04.2016


Ответы (2)


Я постараюсь указать на вашу ошибку.

Я думал, что этот алгоритм проходит по графу как BFS.

Это неправда. Этот алгоритм повторно перебирает все ребра графа и «расслабляет» их до тех пор, пока не достигнет стабильного состояния (когда релаксация больше невозможна).

Прикрепленный вами пример немного сбивает с толку и напоминает выполнение BFS. это связано с тем, что на каждой итерации выделяются только ребра, которые повлияли на значение узлов (ребра, которые были ослаблены).

Итак, чтобы ответить на ваш вопрос, выберите любой порядок краев и начните так называемое «расслабление» их. Для каждого ребра установите значение d его указывающего узла равным кратчайшему расстоянию от Z, а его пи — его предшествующим узлом. повторяйте это, пока все значения не станут стабильными.

Надеюсь это ответит на твой вопрос.

person Ido.Co    schedule 27.11.2011

Как сказал Ido.Co, в Bellman Ford нет определенного порядка сканирования/итерации. Но говорят, что при сканировании в ширину выполнение выполняется быстрее.

person Varun Garg    schedule 22.01.2017