class Solution {
private:
int res = 0;
public:
/**
*
* @param n int整型 the n
* @return int整型
*/
int Nqueen(int n) {
// write code here
vector<vector<int>> rec(n, vector<int>(n, 0));
dfs(rec, n, 0);
return res;
}
void dfs(vector<vector<int>>& rec, int n, int cur){
if(cur == n){
res += 1;
return;
}
for(int j=0; j<n; j++){
bool a = check(rec, n, cur, j);
if(a){
rec[cur][j] = 1;
dfs(rec, n, cur+1);
rec[cur][j] = 0;
}
}
}
bool check(vector<vector<int>>& rec, int n, int cur_i, int cur_j){
for(int i=0; i<cur_i; i++){
if(rec[i][cur_j] == 1){
return false;
}
}
int i=cur_i-1, j=cur_j+1;
while(i>=0 && j<n){
if(rec[i][j] == 1){
return false;
}
i--;
j++;
}
i=cur_i-1, j=cur_j-1;
while(i>=0 && j>=0){
if(rec[i][j] == 1){
return false;
}
i--;
j--;
}
return true;
}
};