Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
分析:跟 N-Queens解法类似
class Solution {
public:
int totals(int n, int num, vector<bool> &RowUsed, vector<bool> &d1, vector<bool> &d2)
{
if(num == n)return 1;
int ret = 0;
for(int i = 0; i < n; i++)
{
if((!RowUsed[i])&&(!d1[i+num])&&(!d2[i-num+n-1]))
{
RowUsed[i] = true;
d1[i+num] = true;
d2[i-num+n-1] = true;
ret += totals(n,num+1,RowUsed,d1,d2);
RowUsed[i] = false;
d1[i+num] = false;
d2[i-num+n-1] = false;
}
}
return ret;
}
int totalNQueens(int n) {
vector<bool> RowUsed(n,false);
vector<bool> diagonal1(2*n-1,false);
vector<bool> diagonal2(2*n-1,false);
if(n < 1)return 0;
return totals(n,0,RowUsed,diagonal1,diagonal2);
}
};