52. N-Queens
方法:
和51题基本一样,只需要修改result状态,找到解result++。
class Solution {
public:
int totalNQueens(int n) {
int result = 0;
vector<int> pos(n, -1);
queensHelper(result, 0, n, pos);
return result;
}
void queensHelper(int & result, int row, int n, vector<int> & pos){
// 如果row==n说明已经n queens been placed
if (row == n){
result++;
}
//否则递归求解下一行
else {
for (int col = 0; col < n; col++){
if (isvalid(row, col, n, pos)){
// 把当前row的queen放好
pos[row] = col;
// 递归下一行
queensHelper(result, row + 1, n, pos);
}
// 不管有没有解,都要把当前的这个queen拿掉,回到循环前的状态
pos[row] = -1;
}
}
return;
}
bool isvalid(int row, int col, int n, vector<int>& pos){
// 查询之前所有皇后的攻击路线
for (int i = 0; i < row; i ++){
// 同一列 正对角线 反对角线
if (pos[i] == col || i + pos[i] == row + col|| i - pos[i] == row - col){
return false;
}
}
return true;
}
};