迪克斯特拉的最终状况

时间:2014-05-28 08:33:39

标签: algorithm graph dijkstra

使用Dijkstra,您可以使用结束条件

   while(!q.isEmpty()){
       //Some code
   }

但是如果您知道结束节点,是否无法将结束条件更改为

   while(!q.peek().equals(endNode){
       //Some code
   }

我见过的Dijkstra的每个实现都使用前面的版本,但是当您知道结束节点时,后者会更快。或者这不是Dijkstra了吗?

1 个答案:

答案 0 :(得分:6)

取决于您希望算法执行的操作。原始Dijkstra算法计算从源到彼此顶点的最短路径的长度。如果您有一个目标顶点,则可以在将目标从队列中弹出后缩短算法。

快捷方式的正确性可以很容易地证明:Dijkstra永远不会改变它已经从队列中弹出的节点的最短路径长度,所以你知道你正在查看它的长度如果继续运行算法直到队列为空,则返回。