Хорошо, я опубликовал этот вопрос из-за этого упражнения:
Можем ли мы модифицировать алгоритм Дейкстраса для решения проблемы самого длинного пути с одним источником, изменяя минимум на максимум? Если это так, проверьте правильность вашего алгоритма. Если нет, укажите контрпример.
Для этого упражнения или всего, что связано с алгоритмом Дейкстры, Я предполагаю, что в графе нет отрицательных весов. В противном случае, это не имеет большого смысла, так как даже для кратчайшего пути проблема, Dijkstra не может работать должным образом, если существует отрицательное ребро.
Хорошо, моя интуиция мне ответила:
Да, я думаю, он может быть изменен.
Я просто
- инициализировать дистанционный массив до MININT
- изменить
distance[w] > distance[v]+weight
наdistance[w] < distance[v]+weight
Затем я провел некоторое исследование, чтобы проверить свой ответ. Я нашел этот пост:
Самый длинный путь между источником и определенными узлами в DAG
Сначала я думал, что мой ответ был неправильным из-за вышеприведенного поста. Но я обнаружил, что, возможно, ответ в вышеприведенном сообщении неверен. Он перепутал проблему с длинным контуром с одним источником с проблемой самого длинного пути.
Также в wiki алгоритм Bellman-Ford, он сказал правильно:
Алгоритм Беллмана-Форда вычисляет кратчайшие пути с одним источником в взвешенном орграфе. Для графов с только неотрицательными весами вершин, более быстрый алгоритм Дийкстры также решает проблему. Таким образом, Bellman-Ford используется в основном для графиков с отрицательным весом кромки.
Итак, я думаю, что мой ответ правильный, не так ли? Dijkstra действительно может быть проблемой с одним источником длинной траектории, и мои модификации также верны, верно?