n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例:
输入: 4
输出: [
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法
class Solution {
public:
int col[10];
vector<vector<string>> ans;
vector<string> tmp;
void search(int cur,int n){
if(cur == n){
vector<string> k = tmp;
for(int i = 0;i < n;i ++){
k[i][col[i]] = 'Q';
}
ans.push_back(k);
}
else{
for(int i = 0;i < n;i ++){
int ok = 1;
col[cur] = i;
for(int j = 0;j < cur;j ++){
if(col[cur] == col[j] || cur + col[cur] == j + col[j] || cur - col[cur] == j - col[j]){
ok = 0;
break;
}
}
if(ok) search(cur+1,n);
}
}
}
vector<vector<string>> solveNQueens(int n) {
string s(n,'.');
for(int i = 0;i < n;i ++) tmp.push_back(s);
search(0,n);
return ans;
}
};