使用Dijkstra算法时需要考虑终止条件。
while(!q.isEmpty()){
//Some code
}
但是如果你知道结束节点,难道不能改变结束条件为:
while(!q.peek().equals(endNode){
//Some code
}
我见过的所有 Dijkstra 的实现都使用了早期的算法,但是如果你知道终点节点,后一种算法更快。或者这已经不是 Dijkstra 算法了吗?
取决于您想让算法做什么。原始的Dijkstra算法计算源点到每个其他顶点的最短路径长度。如果您只有一个目标顶点,可以在弹出目标节点后缩短算法。
缩短算法的正确性可以很容易地证明:Dijkstra从未更改已经弹出队列的节点的最短路径长度,因此您知道您看到的是它在将算法运行直到队列为空时返回的长度。