基于(N-1)×(N-1)棋盘的解的情况推出N×N棋盘的解的情况的N皇后问题

N皇后问题是一个比较经典的问题,其主要目标是在N×N的棋盘上,放置N个皇后,要求所有皇后之间不能互相攻击,即任意两个皇后不能处在同一行、同一列或同一对角线上。解决该问题可以采用递归的方式,基于(N-1)×棋盘的解的情况推出N×N棋盘的解的情况。

解决N皇后问题的关键在于如何放置皇后。可以用一个二维数组board表示棋盘,其中board[i][j]表示第i行第j列是否放置了皇后。对于每一行i,遍历该行的每一列j,判断该位置是否可以放置皇后。如果可以放置,将board[i][j]置为1,继续判断下一行。如果不能放置,继续遍历该行的下一列。如果遍历完该行的所有列都不能放置皇后,则返回上一行,重新遍历该行的下一列。

对于基于(N-1)×棋盘的解的情况推出N×N棋盘的解的情况,可以分为两个步骤:

1.复制(N-1)×棋盘的解到N×N棋盘 2.在N×N棋盘上填充第N个皇后

具体实现方式如下:

  1. 复制(N-1)×棋盘的解到N×N棋盘 对于(N-1)×棋盘的解,可以直接复制到N×N棋盘的前N-1行,第N行先不填充皇后,之后再填充。

  2. 在N×N棋盘上填充第N个皇后 对于第N行,遍历该行的每一列j,判断该位置是否可以放置皇后。如果可以放置,将board[N][j]置为1,继续填充下一行。如果不能放置,继续遍历该行的下一列。如果遍历完该行的所有列都不能放置皇后,则返回上一行,重新遍历该行的下一列。

最终得到的解就是N×N棋盘上所有皇后都不互相攻击的放置方案。

你可能感兴趣的:(数据结构)