我可以理解跟踪累积距离,每条路径的距离以及跟踪顶点的名称(或位置),但为什么要跟踪步数,除非您想要跟踪它的效率到达目的地?
这个步骤对于找到路径是完全没必要的,而且无论如何它似乎相当随意。例如,如果你有多个顶点,其中累积的距离是相同的,并且是最小的数字,则没有理由关心你从哪一个开始,但是无论哪一个被标记为下一步行。
我看到很多代码,他们通常遵循跟踪步骤的原则。这似乎很奇怪,特别是当它们中的许多人在2D矩阵上进行寻路时,其中运动成本是1或无限。在这种情况下,在我看来,不仅每个顶点的步数是多余的,而且唯一需要被打扰的信息是顶点的距离和标签。如果你有一个距离,你知道你已经访问了顶点,并且由于所有距离都是相同的,所以第一次到达顶点应始终是它的最低距离。不评估它是低还是大是必要的,只有它存在。
无论如何,我只是好奇为什么这么简单的东西应该收集多余的信息。有什么理由我只是不抓?
编辑 -
要添加一点清晰度,并且由于评论中没有正确格式化,该步骤通常显示在人们告诉您使用的表格中。
____________________
|name|step|distance|
--------------------
|temporary Labels |
--------------------
当位置是到原点的下一个最短点时,添加步骤。
答案 0 :(得分:2)
好的,我现在已经看过这个视频了,这实际上是我第一次看到这样的桌子被使用过。这对我来说没什么意义。它完全混合了“标签”和“距离”;永久标签是标记节点的顺序,而临时标签是当前非固定距离。这些都不是必需的。
相反,您通常对节点所拥有的内容如下:距离(来自起始节点),父(或上一个)节点以及标记将节点标记为已完成(在实现中,您通常会为所有未标记的节点设置优先级队列)。
然后,您继续查看总距离最小的未标记节点,标记它并更新所有未标记邻居的距离。每当您更新到更短的距离时,您也会更新父节点。
除非您需要将节点标记为已完成或具有所有先前不完整的距离,否则无法执行此操作。对我来说,在那个视频中,似乎只是一种方法可以让你更容易检查学生的工作,因为如果没有相同的距离你总是只有一个订单来查看顶点。
话虽这么说,正常Dijkstra algorithm不包括这些东西,并没有必要。有关实际存储内容的实现详细信息,请参阅维基百科上的pseudocode(如上所述,您通常只有每个节点的距离和父节点,以及未标记节点的优先级队列)。
这似乎很奇怪,尤其是当它们中的许多人在2D矩阵上进行寻路时,其中运动成本为1或无限。
您在这里描述的是一个非常特殊的情况。 Dijkstra算法实际上用于许多图形问题,其中距离不相等,并且更多连接在每个方向上只有4个简单邻居。