Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
思路:回溯法。由于不用放置整個棋盤上的元素,是以類似數獨那一題,隻用判斷列和兩個對角線是否可以放置即可。還是深度優先搜尋,逐行逐列的放置,當最後一行也可以放置時計數加1。
class Solution {
public:
int totalNQueens(int n) {
vector<bool>col(n,true);
vector<bool>main(*n-,true);
vector<bool>anti(*n-,true);
int count=;
dfs(,count,n,col,main,anti);
return count;
}
void dfs(int i,int &count,int n,vector<bool>&col,vector<bool>&main,vector<bool>&anti){
if(i==n){
count++;
return;
}
for(int j=;j<n;j++){
if(col[j]&&main[i+j]&&anti[i+n--j]){
col[j]=main[i+j]=anti[i+n--j]=false;
dfs(i+,count,n,col,main,anti);
col[j]=main[i+j]=anti[i+n--j]=true;
}
}
}
};