n皇后问题也属于经典的回溯算法
leetcode 51. N皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
实例
输入: 4
输出:[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
解释: 4 皇后问题存在两个不同的解法。
全排列问题的衍生
n皇后问题是n*n的棋盘上,放n个皇后,使得每行,每列,每条主对角线和副对角线不能有两个皇后。
我们可以看成全排列问题,即用例如123表示每行的放法,第1行第1列放一个皇后,第2行第3列放一个皇后,第3行第3列放一个皇后。
我们每次枚举看该行可以再哪一列放皇后(即剪枝)。
时间复杂度O(N!) , 空间复杂度O(N),记录列,主对角线和副对角线是否可以放
核心代码
class Solution {
public:
int n;
vector<vector<string>> ans;
vector