Я делаю домашнюю задачу, где мне нужно запустить алгоритм Беллмана-Форда, начиная с вершины z. Он хочет, чтобы я «при каждом проходе ослаблял ребра в том же порядке, что и на рисунке, и показывал значения d и pi после каждого прохода». Насколько я понимаю, я думал, что этот алгоритм пересекает граф как BFS, что имеет смысл из рисунка, который они хотят, чтобы я использовал, поэтому я не вижу, как будет работать тот же путь. Если бы кто-нибудь мог указать мне в правильном направлении, указав, как начать, это было бы очень полезно. Вопрос и рисунок, к которому относится вопрос:
Использование алгоритма Беллмана-Форда: как правильно пройти каждое ребро?
Ответы (2)
Я постараюсь указать на вашу ошибку.
Я думал, что этот алгоритм проходит по графу как BFS.
Это неправда. Этот алгоритм повторно перебирает все ребра графа и «расслабляет» их до тех пор, пока не достигнет стабильного состояния (когда релаксация больше невозможна).
Прикрепленный вами пример немного сбивает с толку и напоминает выполнение BFS. это связано с тем, что на каждой итерации выделяются только ребра, которые повлияли на значение узлов (ребра, которые были ослаблены).
Итак, чтобы ответить на ваш вопрос, выберите любой порядок краев и начните так называемое «расслабление» их. Для каждого ребра установите значение d его указывающего узла равным кратчайшему расстоянию от Z, а его пи — его предшествующим узлом. повторяйте это, пока все значения не станут стабильными.
Надеюсь это ответит на твой вопрос.
Как сказал Ido.Co, в Bellman Ford нет определенного порядка сканирования/итерации. Но говорят, что при сканировании в ширину выполнение выполняется быстрее.