/*
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
Subscribe to see which companies asked this question
*/
/*
解题思路:
跟上一个题很相似,甚至比上一个题目还要简单,只要求统计否和要求的个数,不需要记录结果
*/
class Solution {
public:
int totalNQueens(int n) {
string s(n,'.');
vector<string> vec(n,s);
int res=0;
dfs(0,vec,res);
return res;
}
void dfs(int cur,vector<string>&vec,int&res){
if(cur==vec.size()){
++res;
return ;
}
for(int i=0;i<vec.size();i++){
if(isvalid(cur,i,vec)){
vec[cur][i]='Q';
dfs(cur+1,vec,res);
vec[cur][i]='.';
}
}
}
bool isvalid(int row,int col, vector<string>vec){
for(int i=0;i<row;i++){
for(int j=0;j<vec.size();j++){
if(vec[i][j]=='Q'){
if(j==col||(abs(i-row))==(abs(j-col)))return false;
}
}
}
return true;
}
};