从点列表中查找最短路径

时间:2016-02-16 21:12:30

标签: java path-finding

如果我有一个通过Java中的2D阵列迷宫的广度优先搜索返回的点列表,我怎样才能找到该点列表中的最短路径?

例如,如果我的潜在目标点是[2,4]和[6,0]并且我有一个到达每个目标点的点列表,我怎样才能找出哪条路线最短?

我想我可能不得不使用Djikstra的算法,但我不确定。

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以在此处使用Dijkstra算法。鉴于您提到的阵列迷宫,第一步是在迷宫中获得2个相邻节点之间的所有边缘,以及边缘成本。对于节点,您需要知道是否已访问过每个节点,以及访问该节点的当前成本。

现在,如果你不关心获得最短路径,你可能不需要Dijkstra。相反,您可以使用DP /递归方法来获取从源坐标到目标坐标的可能路径。如果你想看到Dijkstra的实现,this是我写的。要获得最短路径,您显然需要节点之间的距离。

要找到2点之间的路径,我建议像this实现一样。它包括DP和递归实现,并比较两者的运行时间(对于大型数据集,递归可能需要很长时间才能运行)。

我觉得这应该足以让你开始。如果您需要其他信息,请与我们联系。

答案 1 :(得分:0)

我最终没有使用Dijkstra,而是更改了我的广度优先搜索以添加"级别"价值或"距离"来自原点的值,每个访问节点将向上计数。如果路径分支,计数将保持一致,并且因为我已经知道了终点,所以它只需要查看"计数"在我的终点并进行比较。

感谢您的帮助!如果该网站允许我,您将获得一个upvote。

对于遇到类似问题的人: 我创建了一个名为PointC的简单类,它继承自Point,但添加了" count"值。使用广度优先搜索的每一步适当更新计数,然后在结束时比较结束点以获得最佳路径。