0

这是我之前关于井字游戏的问题的延续。我正在制作一个函数,它将收集井字棋棋盘的所有空网格图块,并将它们返回到一个列表中。这个函数将是递归的,因为它会不断寻找与移动相邻的空网格图块。像这样的东西:

<------->
< X O - >
< - - X >
< O X - >
<------->

因此,假设用户(或者在这种情况下,我为与计算机对战的计算机编写的代码)想通过选择一个图块来了解哪些网格图块是空的。对于上面的示例,瓷砖将被编号

0 1 2
3 4 5 
6 7 8

所以假设计算机选择了瓷砖 1 - 它会搜索相邻的瓷砖(所以在这种情况下,顶部、左侧、右侧和底部)并查看它是否可以在那里移动。如果它发现相邻的图块是空的,它也会找到该图块的相邻图块,直到用尽所有可能性。因此,我希望能够使用当前棋盘和 playerMove 调用我的函数,并找到相邻的空白图块,并将它们附加到列表中。有小费吗?

def whatIsEmpty(moveList,move):
     emptyTiles = []
     #something that allows you to find the adjacent tiles of the move
     #something that allows you to find the adjacent tiles of the tiles found above, until all are found

我知道我需要几个 for 循环,但我不知道如何开始。我所知道的是我想在一个假想的 3x3 网格的中间移动,并找到它的相邻图块,看看它们是否是空的,等等。所以在二维列表中,我会使用这样的东西:

moveList[x-1][y]
moveList[x][y+1]
moveList[x+1][y]
moveList[x][y+1]

其中每一个对应于顶部、右侧、左侧和底部,这将被递归使用。非常感谢任何提示。

4

1 回答 1

1

在这种情况下,递归策略可能不是最好的。考虑您自己提供的示例:

<------->
< X O - >
< - - X >
< O X - >
<------->

假设下一步是在中间的瓷砖上进行的。如果递归函数只检查与其相邻的四个图块,那么它将错过与其余部分“切断”的图块(右下角)。如果你要编写一个函数来检查所有 8 个相邻的瓦片(包括对角相邻的),你不妨迭代地编写它。

for i in range(3):
   for j in range(3):
      pass # Replace with code to add empty tile to list
于 2013-03-26T01:33:41.177 回答