Algorithm 识别矩阵边的简单逻辑

Algorithm 识别矩阵边的简单逻辑,algorithm,a-star,sliding-tile-puzzle,Algorithm,A Star,Sliding Tile Puzzle,我试图计算节点的有效邻居 数组包含类似于[2,8,3,0,1,4,7,6,5] 矩阵: 2 8 3 0 1 4 7 6 5 它类似于8字谜逻辑。在上面的矩阵中,我可以用2或1或7交换0。我试过用-1,+1,-3,+3。但是0不能与3交换。所以我不能使用-1或+1。我还需要更新数组中的位置。实现这一点的逻辑是什么。因为它只有3x3,所以您可以硬编码邻居列表(如果它更复杂,我建议编写一个计算它的逻辑): 0:[1,3]表示数组中的第一项(

我试图计算节点的有效邻居

数组包含类似于
[2,8,3,0,1,4,7,6,5]

矩阵:

          2 8 3
          0 1 4
          7 6 5

它类似于8字谜逻辑。在上面的矩阵中,我可以用2或1或7交换0。我试过用-1,+1,-3,+3。但是0不能与3交换。所以我不能使用-1或+1。我还需要更新数组中的位置。实现这一点的逻辑是什么。

因为它只有3x3,所以您可以硬编码邻居列表(如果它更复杂,我建议编写一个计算它的逻辑):

0:[1,3]
表示数组中的第一项(值=
2
)在索引上有邻居:1,3(值:
8
0
)。等等

如果你需要处理一个更大的“矩阵”,那么你应该计算邻域。
将输入移动到矩阵(数组数组)中,然后根据ak0053792在下面编写的“规则”列表进行计算会更容易,但也会处理所有“角点”情况(例如,最上面一行的项目在y-1处没有邻居).

简单的逻辑是检查从中交换所选元素的数组元素是否是相邻元素。这可以通过下面的算法来实现

1) 定位当前元素的位置

2) 找到进行交换的元素的位置

3) 检查交换元素的位置是否位于当前元素的以下范围内,因此如果当前元素的位置为x,y,则交换元素必须位于:

1) x-1, y-1
2) x-1, y
3) x-1, y+1
4) x, y-1
5) x, y+1
6) x+1, y+1
7) x+1, y
8) x+1, y-1

他使用的是平面阵列,这不是矩阵(你没有两个坐标)。是的。我使用的是平面阵列。我可以用上述条件检查逻辑。但我需要更新/交换平面阵列中的对象,没错。但理想情况下,在这里使用2D数组似乎更符合逻辑。我使用objective c来实现这一点。但我从一个平面阵列开始,如果我把它改成二维阵列,可能会使我的整个逻辑变得复杂。@iPhoneGuy你可以把一个“转换器”从一维阵列变成二维阵列,然后再回来。这将是更容易的部分:)它是动态的。以上将增加到8x8矩阵。我不能硬编码这个值。我需要在跑步时检查一下time@iPhoneGuy提示:您将不得不大量使用模运算
1) x-1, y-1
2) x-1, y
3) x-1, y+1
4) x, y-1
5) x, y+1
6) x+1, y+1
7) x+1, y
8) x+1, y-1