Я повинен знайти негативний цикл у спрямованому зваженому графіку. Я знаю, як працює алгоритм Беллмана Форда, і це говорить мені, чи є недоступний негативний цикл. Але це прямо не називає.
Як я можу отримати фактичний шлях циклу?
Після застосування стандартного алгоритму ми вже зробили ітерацій, і подальше вдосконалення не повинно бути можливим. Якщо ми все-таки зможемо зменшити відстань до вузла, існує негативний цикл.
Моя ідея: Оскільки ми знаємо край, який все ще може покращити шлях, і ми знаємо попередника кожного вузла, ми можемо простежити свій шлях назад від цього краю, поки ми не зустрінемо його знову. Тепер у нас повинен бути наш цикл.
На жаль, я не знайшов жодного паперу, який би сказав мені, чи правильно це. Отже, чи справді це працює так?
Редагувати: Цей приклад підтверджує, що моя ідея неправильна. З огляду на наступний графік, ми запускаємо Bellman-Ford з вузла .
Обробляємо ребра в порядку . Після ітерацій ми отримуємо відстані вузлів:
та батьківська таблиця: має батьківський має батьківський має батьківський
Тепер, роблячи ту ітерацію, ми бачимо, що відстань вузла можна ще вдосконалити за допомогою краю . Отже, ми знаємо, що негативний цикл існує і частина є.
Але, простеживши наш шлях назад через батьківську таблицю, ми застряємо в іншому негативному циклі і ніколи не зустрінемося знову.а
Як ми можемо вирішити цю проблему?