2015-04-01 98 views

回答

3

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

  • 开始:

    算法通常被配制两种方式之一。在这种情况下,当找到所有可到达的节点时,该算法将停止。

  • 首先将全部节点添加到优先级队列。在这种情况下,当队列中只剩下不可到达的节点时,您将开始提取无法访问的节点,但它们中的每一个都具有无穷大的距离,因此它们永远不会向其他任何节点贡献较短的路径。
+0

啊,呃!我想我可能会误解 - Djistraka的实际上会完成,但是当你从源头向后“迭代”时,预测指针似乎指向一个循环。如何解决这个问题?我考虑在运行前检查目标是否在里面,或者检查运行路径的长度...... – 2015-04-01 23:26:08

+0

他们不知道;前任指针被初始化为零(这并不意味着它们指向自己;它们指向任何地方)。 – 2015-04-01 23:28:23

+0

如果我有A - > B断开连接,然后D - > C断开连接并运行算法,A会不会指向B,然后B会连接到A?或者这是我执行的错误? – 2015-04-01 23:29:35

1

长话短说,也不会无限循环,因为Dijkstra算法是BFS(由水平横向水平)+贪婪(放松从以前的水平,以目前的水平距离),它并没有穿越回到先前level 。该算法将在队列为空时结束。

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

+1

那么,该算法不会返回数字,null或类似的东西。我应该更清楚。迪克斯特拉本身不会无休止地循环,但“先前”指针似乎无止境地彼此循环着! – 2015-04-01 23:17:33