Dijkstra 算法是否带有优先级队列句柄未找到目标?

Does Dijkstra's algorithm with a priority queue handle destination not found?

我知道该算法是如何工作的——但它似乎只是在使用优先级队列试图找到无法找到的目标节点时无限循环。

Dijkstra 算法是否处理节点与图断开连接的情况?

长话短说,它不会无休止地循环,因为Dijkstra是BFS(逐层遍历)+ Greedy(放宽从上一层到当前层的距离),它不是遍历回到上一个level。当队列为空时,算法将结束。

如果没有找到目的地,算法应该return -1 或 null。

在每次迭代中,从优先级队列中只提取一个节点,并且永远不会再次添加。因此,优先级队列最终会变空,算法会在这种情况发生时停止。如果没有到目标节点的路径,则无法到达的节点会将其前导指针设置为 nil(这是它们的初始值)。

算法通常采用以下两种方式之一:

  • 首先将起始节点添加到优先级队列。在这种情况下,算法将在找到所有可达节点后停止。
  • 首先将所有个节点添加到优先级队列中。在这种情况下,当队列中只剩下不可达节点时,你将开始提取不可达节点,但它们每个都有无穷远的距离,因此它们永远不会为任何其他节点贡献更短的路径。