在二维阵列中解决NxN难题

时间:2011-11-21 20:43:49

标签: java algorithm

我正在解决Java 2D数组中的NxN难题(int state[][]),需要帮助,因为我陷入困境,无法继续前进。

使用曼哈顿距离启发式算法。我现在遇到的问题是如何生成(代码)节点的后继者。我在网上看到了很多关于如何生成节点的后继(邻居)的例子,但它们都是一维数组。我找不到任何教导在2D阵列中生成节点后继者的教程。

我在问是否有人可以帮助我找出如何编码以生成节点的后继者。节点可以移动到空白区域到LEFT,RIGHT,DOWN或UP。电路板的尺寸为NxN。所以我想知道如何编写代码。

拜托,这是我第一次使用2D阵列来编写像这些迷宫一样的游戏,所以做得好并给我一些解释你的答案,这样我就能理解它。

1 个答案:

答案 0 :(得分:1)

您可能已定义的代码

UP as ( i + width * (j-1))
DOWN as ( i + width * (j+1))
LEFT as ( i - 1 + width * j)
RIGHT as (i + 1 + width *j)

您需要将它们分别定义为(i,j-1),(i,j + 1),(i-1,j),(i + 1,j)。

编辑:

在1D数组中,您需要展平元素索引。如果元素位于列i,行j,则平面地址将是(j * width [表示跳过j行] + i [表示跳过此行中的i项])。如果您有一个2D数组,那么您可以简单地使用array [i] [j]而不是平面地址。