我知道算法是如何工作的 - 但是当使用优先级队列试图找到无法找到的目标节点时,它似乎会无休止地在循环中反弹。
Dijkstra的算法是否处理节点与图表断开连接的情况?
答案 0 :(得分:4)
在每次迭代中,从优先级队列中提取一个节点,并且永远不会再添加它。因此,优先级队列最终将变为空,并且算法在发生时停止。如果没有到目标节点的路径,则无法到达的节点将其前任指针设置为nil(这是它们的初始值)。
该算法通常采用以下两种方式之一制定:
答案 1 :(得分:1)
长话短说,它不会循环,因为Dijkstra是BFS(逐级移动)+贪婪(放松从前一级到当前级别的距离),它确实不遍历回到之前的level
。当队列为空时,算法将结束。
如果找不到目的地,算法应返回-1或null。