Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
class Solution {
public:
int totalNQueens(int n) {
vector<int> x(n+1);
int sum = 0;
backtrack(1, n, sum, x);
return sum;
}
private:
void backtrack(int t, int n, int &sum, vector<int> &x)
{
if(t>n) //n为皇后的数目
{
sum++;//sum为所有的可行的解
}
else
for(int i = 1;i<=n;i++)
{
x[t] = i;
if(place(t, x)) backtrack(t+1, n, sum, x);//此处的place函数用来进行我们上面所说的条件的判断,如果成立,进入下一级递归
}
}
bool place(int k, vector<int> &x)
{
for(int j = 1;j<k;j++)
if(abs(x[k] - x[j]) == abs(k-j)||x[j] == x[k])
return false;
return true;
}
};