好的,我发布这个问题是因为这个练习:
我们能通过将最小值改为最大值来修改 Dijkstra 算法以解决单源最长路径问题吗?如果可以,请证明您的算法正确。如果不行,请提供一个反例。
对于这个练习或所有与 Dijkstra 算法相关的事情,我假设图中没有负权重。否则,这就没有多大意义,因为即使对于最短路径问题,如果存在负边缘,Dijkstra 也无法正常工作。
好的,我的直觉告诉我:
是的,我认为它可以被修改。
我只需要:
- 将距离数组初始化为MININT
- 将
distance[w] > distance[v]+weight
更改为distance[w] < distance[v]+weight
然后我进行了一些研究以验证我的答案。我找到了这篇文章:
起初我认为我的答案是错误的,因为上面的文章。但我发现可能上面文章中的答案是错误的。它混淆了单源最长路径问题和最长路径问题。
另外,在Bellman-Ford算法的维基中,它正确地说道:
所以我认为我的答案是正确的,对吗?Dijkstra确实可以成为单源最长路径问题,而且我的修改也是正确的,对吗?Bellman-Ford算法计算带权有向图中的单源最短路径。对于只有非负边权的图形,更快的Dijkstra算法也可以解决此问题。因此,Bellman-Ford主要用于具有负边权的图形。