好的,由于这个练习,我发布了这个问题:
我们可以修改 Dijkstra 算法,通过将最小值变为最大值来解决单源最长路径问题吗?如果是这样,那么证明你的算法是正确的。如果不是,请提供一个反例。
对于这个练习或与 Dijkstra 算法相关的所有事情,我假设图中没有负权重。否则,它没有多大意义,因为即使对于最短路径问题,如果存在负边缘,Dijkstra 也无法正常工作。
好的,我的直觉为我回答了这个问题:
是的,我认为它可以修改。
我只是
- 将距离数组初始化为 MININT
- 更改
distance[w] > distance[v]+weight
为distance[w] < distance[v]+weight
然后我做了一些研究来验证我的答案。我找到了这篇文章:
首先,由于上面的帖子,我认为我的答案是错误的。但是我发现上面帖子中的答案可能是错误的。它将单源最长路径问题与最长路径问题混为一谈。
同样在Bellman-Ford algorithm的 wiki 中,它正确地说:
Bellman-Ford 算法计算加权有向图中的单源最短路径。对于只有非负边权重的图,更快的 Dijkstra 算法也解决了这个问题。因此,Bellman-Ford 主要用于具有负边权重的图。
所以我认为我的答案是正确的,对吧?Dijkstra 真的可以是单源最长路径问题,我的修改也是正确的,对吧?