请参照以下代码实现,其中board
为一个大小为n x n
的列表,存储N-Puzzle问题的当前状态,0代表空格。zero_pos
保存了空格的位置。这里我们以上移为例:
def move_up(board, zero_pos):
n = len(board)
row, col = zero_pos
if row == 0:
return False
else:
board[row][col] = board[row-1][col]
board[row-1][col] = 0
zero_pos[0] = row - 1
return True
为了确保移动是可行的,函数会首先检查空格是否在顶部,如果在顶部则无法上移,直接返回False
。如果可以上移,则将空格上移一格,同时将上方的数字移到空格的位置。最后返回True
,表示上移成功。
类似的,我们可以编写下移、左移、右移的函数,每次移动时更新空格的位置即可。