使用Dijkstra,您可以使用结束条件
while(!q.isEmpty()){
//Some code
}
但是如果您知道结束节点,是否无法将结束条件更改为
while(!q.peek().equals(endNode){
//Some code
}
我见过的Dijkstra的每个实现都使用前面的版本,但是当您知道结束节点时,后者会更快。或者这不是Dijkstra了吗?
答案 0 :(得分:6)
取决于您希望算法执行的操作。原始Dijkstra算法计算从源到彼此顶点的最短路径的长度。如果您有一个目标顶点,则可以在将目标从队列中弹出后缩短算法。
快捷方式的正确性可以很容易地证明:Dijkstra永远不会改变它已经从队列中弹出的节点的最短路径长度,所以你知道你正在查看它的长度如果继续运行算法直到队列为空,则返回。