N皇后。n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例:
1 | |
思路一
queen 存储每行第几列放置一个皇后,当 queen 的行数等于 n 时,迭代结束。接下来就是判断皇后是否合法,首先每行只放一个皇后保证的行合法;当新的列 col 不存在 queen 中时,列合法;遍历之前放置的皇后的位置i(行), j(列),如果新的行 row 和 col,满足 row + col != i + j,则 45° 对角线合法;满足 row - col != i - j,则 135° 对角线合法。
1 | |
思路二
在思路一中判断新的皇后放置是否合法时,需要遍历之前已经放置的皇后的位置,实际上可以用两个数组保存之前皇后放置时的 45° 对角线的位置和 135° 对角线的位置,这样就不用每次都遍历了。
1 | |