Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
思路:II比I简单,只需在I的基础上不打印计数即可。
class Solution {
private:
vector<bool> used;
vector<vector<bool> > queen;
int total;
public:
bool isAdj(int row, int col)
{
int n = queen.size();
int i,j;
i = row-1, j = col - 1;
while(i>=0 && j>=0)
{
if (queen[i][j])
{
return true;
}
i--,j--;
}
i = row - 1, j = col + 1;
while(i>=0 && j<n)
{
if (queen[i][j])
{
return true;
}
i--,j++;
}
return false;
}
void solveNQueensHelper(int pos,int n)
{
if (pos == n)
{
total++;
return;
}
int i;
for(i=0; i<n; ++i)
{
if (!used[i] && !isAdj(pos,i))
{
used[i] = true;
queen[pos][i] = true;
solveNQueensHelper(pos+1,n);
used[i] = false;
queen[pos][i] = false;
}
}
}
int totalNQueens(int n) {
used.clear();
queen.clear();
total = 0;
if (n <= 0)
{
return total;
}
used.resize(n);
queen.resize(n);
int i,j;
for(i=0; i<n; ++i)
{
used[i] = false;
queen[i].resize(n);
for(j=0; j<n; ++j)
{
queen[i][j] = false;
}
}
solveNQueensHelper(0,n);
return total;
}
};