Dikjstra如何在此图中找到最短路径?

时间:2019-06-16 02:30:07

标签: algorithm dijkstra

如果我们必须找到从0到3的最短路径,我很难理解Dijkstra是如何在下图中找到最短路径的(从我的理解方式):https://graphonline.ru/tmp/saved/SH/SHBqKyENwJqcCJGM.png

如果算法从0中选择最小的权重并将0标记为已访问,那么它是不是选择节点1然后选择节点3?它将如何选择节点2?

3 个答案:

答案 0 :(得分:2)

Dijkstra的算法涉及一个优先级队列,其中保留了从被访问节点直接可到达的所有节点以及它们到起始节点的距离。

该算法将访问节点0,并将节点1和2添加到优先级队列。然后它将访问节点1,因为它是优先级队列中最接近的节点,并将节点3添加到优先级队列中,距离为6。节点2仍在队列中,并且由于它比节点3更靠近节点0, ,接下来将访问它。当访问节点2时,将找到到节点3的长度为4的较短路径,因此到节点3的距离将更新为4。然后将访问节点3。

答案 1 :(得分:1)

基本上,Dijkstra只能用于确定给定加权图中从一个源节点到同一图数据结构内每个其他节点的最短路径,前提是这些节点可从源节点到达。 该算法一直运行到访问图形中的所有顶点为止。最短的路径会不断查找和更新。

也许此链接将有助于更好地了解算法本身。 https://medium.com/basecs/finding-the-shortest-path-with-a-little-help-from-dijkstra-613149fbdc8e

答案 2 :(得分:0)

根据我的理解,在选择下一个要访问的顶点之前,该算法会重新计算相邻未访问顶点的暂定距离。当您为1时,首先要重新计算其相邻未视顶点的暂定距离,在这种情况下为3。然后选择暂定距离最短的未视节点,在这种情况下为2,并访问该节点。