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皇后不能想到递归建议先看完算法书。
C++代码
class Solution {
public:
void dfs(int row, vector<string> last,vector<vector<string>>& res, int n){
for(int col = 0; col < n; col++){
bool flag = true;
vector<string> temp;
for(int i = 0; i <= row; i++){
if(last[i][col] == 'Q' || last[i][col - (row - i)] == 'Q' || last[i][col + (row - i)] == 'Q' ){
flag = false;
break;
}
}
if(flag){
temp = last;
temp[row][col] = 'Q';
if(row == n - 1){
res.push_back(temp);
}else{
dfs(row + 1, temp, res, n);
}
}else{
continue;
}
}
return;
}
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> res;
string t = "";
for(int i = 0; i < n; i++){
t += ".";
}
vector<string> temp(n, t);
dfs(0, temp, res, n);
return res;
}
};