使用Dijkstra算法在网格上进行寻路

Pho*_*xDD 2 c++ algorithm dijkstra path-finding

这次再次遇到路径查找问题

我已经在许多站点上阅读了Dijkstra的应用程序。对于Graph进行了大部分解释,并找出了从源节点到所有节点的最短路径。

我无法弄清楚的是如何使用Dijkstra在网格上进行路径查找,如Wikipedia图片中所述

因为在网格上,我们只有一个目标,所以我们必须找出到源的最短距离。我无法将其与图表上的Dijkstra关联。没有标记为INFINITY或将距离与其他路径/节点进行比较的图块。

简而言之,问题是我们如何继续使用Dijkstra来使用定义了该算法的实际图形算法在网格中查找路径。我们是否像BFS一样进行处理,并称其为Dijkstra的网格,还是有区别?因为我无法找出任何:/

谢谢 :)

Jav*_*i V 5

为了在网格中应用dijkstra的算法,无需进行任何修改,因为网格是一个图,其中节点(单元)具有4/8个子节点(取决于您的连接性),它们是邻居。因此,您要做的就是:选择您的根节点(从何处开始),将其赋值为0,然后评估4/8个邻居,成本为1(如果为4个对角邻居,则为sqrt(2),如果您正在使用8连接性)。必须将此根节点标记为已访问,并将评估的邻居标记为开放。然后,您在评估中选择一个具有最小值的节点(单元)(在这种情况下,它们全部将具有值1),因此您可以选择任何一个。当将邻居添加到打开列表时,可能会出现其中一些邻居已被访问的情况,因此您可以忽略它们。如果已经在打开列表中,

实际上,您会发现与您所阅读的通用Dijkstra算法完全没有区别。

注意:为了获得最小的打开列表效率,建议在每次迭代时使用堆(通常是二进制堆)而不是在所有打开的节点上运行min函数。