algorithm - Dijkstra 的终止条件

标签 algorithm graph dijkstra

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

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

但是如果知道结束节点,是不是就不能把结束条件改成

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

我见过的每个 Dijkstra 实现都使用较早的方法,但当您知道结束节点时,较晚的方法更快。还是这不再是 Dijkstra?

最佳答案

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

捷径的正确性很容易证明:Dijkstra 永远不会更改已经从队列中弹出的节点的最短路径长度,因此您知道如果您继续运行算法直到队列为空。

关于algorithm - Dijkstra 的终止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906530/

相关文章:

c++ - 如何将一组 C++ 动态分配的对象表示为 BGL(Boost Graph Library)图以获得它们的依赖图?

Python:判断跨n个数组的路径中的每一步是否都低于阈值

c - 链表图实现中 Dijkstra 算法的大问题

最小化像素拉伸(stretch)效应的算法

python - 如何将文件分成 block 以进行多处理

algorithm - 查找边不相交的路径(不是数字,而是路径)

javascript - Google 饼图未显示所有数据行

javascript - 找到在一定限制下给出最大总和的子集(子集总和)

java - Java中的括号算法说明

c++ - 使用 Dijkstra 或 Bellman–Ford 算法修改的最短路径