我知道这个算法是如何工作的 - 但是当使用优先级队列试图找到无法找到的目的节点时,它好像会在一个循环中无休止地反弹。Dijkstra算法的优先级队列处理目标未找到?
Dijkstra的算法是否处理节点与图断开的情况?
我知道这个算法是如何工作的 - 但是当使用优先级队列试图找到无法找到的目的节点时,它好像会在一个循环中无休止地反弹。Dijkstra算法的优先级队列处理目标未找到?
Dijkstra的算法是否处理节点与图断开的情况?
在每次迭代中,只有一个节点从优先级队列中提取,并且永远不会再次添加。因此,优先级队列最终将变为空,并且在发生时停止算法。如果没有到达目标节点的路径,则不可达节点将其前导指针设置为零(这是它们的初始值)。通过增加仅仅是开始节点优先级队列
算法通常被配制两种方式之一。在这种情况下,当找到所有可到达的节点时,该算法将停止。
长话短说,也不会无限循环,因为Dijkstra算法是BFS(由水平横向水平)+贪婪(放松从以前的水平,以目前的水平距离),它并没有穿越回到先前level
。该算法将在队列为空时结束。
如果找不到目标,算法应该返回-1或null。
那么,该算法不会返回数字,null或类似的东西。我应该更清楚。迪克斯特拉本身不会无休止地循环,但“先前”指针似乎无止境地彼此循环着! – 2015-04-01 23:17:33
啊,呃!我想我可能会误解 - Djistraka的实际上会完成,但是当你从源头向后“迭代”时,预测指针似乎指向一个循环。如何解决这个问题?我考虑在运行前检查目标是否在里面,或者检查运行路径的长度...... – 2015-04-01 23:26:08
他们不知道;前任指针被初始化为零(这并不意味着它们指向自己;它们指向任何地方)。 – 2015-04-01 23:28:23
如果我有A - > B断开连接,然后D - > C断开连接并运行算法,A会不会指向B,然后B会连接到A?或者这是我执行的错误? – 2015-04-01 23:29:35