繁体   English   中英

具有优先级队列的Dijkstra算法是否找不到目的地?

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

我知道算法的工作原理-但当使用优先级队列尝试查找无法找到的目标节点时,它似乎会不断循环跳动。

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

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

通常以以下两种方式之一制定算法:

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

长话短说,由于Dijkstra是BFS(逐级遍历)+ Greedy(放松从上一水平到当前水平的距离),所以它不会无休止地循环,并且不会遍历回到上一level 当队列为空时,该算法将结束。

如果找不到目标,则算法应返回-1或null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM