2D阵列中的寻路

时间:2010-07-21 15:12:45

标签: java arrays 2d a-star path-finding

假设我有这个2D阵列地图

{ 0,0,0,0,7,1,1,1,1,1,1,1,1 },
{ 0,7,7,7,7,1,1,1,24,1,1,1,1 },
{ 0,7,24,24,24,24,24,24,24,1,1,3,1 },
{ 0,7,23,23,23,23,23,23,24,1,1,3,1 },
{ 0,7,24,23,23,23,23,23,23,1,1,1,1 },
{ 0,7,24,23,23,23,23,23,23,1,1,1,1 },
{ 0,7,23,23,23,23,23,23,24,1,3,1,1 },
{ 0,7,24,24,24,24,24,24,24,1,3,1,1 },
{ 0,0,0,0,1,1,1,1,1,1,1,1,1 },

我的HashSet充满了定义被阻止的磁贴的整数。什么是一个好方法,以便当我点击地图的一部分时,我的玩家站在那里做一个好的寻路? A *(使用节点/等)?你有什么建议?

感谢。

1 个答案:

答案 0 :(得分:6)

如果图表的大小实际上是您所描述的示例的顺序,那么您可以安全地使用Dijkstra's algorithm,因为它实现起来比A *更简单,并且没有实际需要对于启发式算法,如果你几乎可以在同一时间进行详尽的搜索:)

至于你关于“使用节点/等”的评论,这已经是一个图表,虽然是一个稍微不合时宜的表示。每个数组值都是一个节点,“edge”由数组中的邻接给出。被阻止的区块可以通过禁止邻接来完成(即,查找被阻止的区块列表以确定是否可以从正在考虑的当前节点到达另一个节点),或者如上面提到的Yossarian所建议的那样,只需将该区块的成本设置为很大,几乎是无限的。但是,如果你采用后一种方法,你将需要确保那些瓷砖永远不会无意中最终出现在解决方案中!