Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
把上题稍微改了一下。似乎这个没有考虑对称的问题,那就无所谓了。
class Solution {
public:
struct Position {
int x;
int y;
Position(int _x, int _y) : x(_x), y(_y) {}
};
bool canPutQueen(int current, int row, vector<Position>& vp) {
for(int ii = 0; ii < current; ii ++) {
if(vp[ii].x == current || vp[ii].y == row || current + row == vp[ii].x + vp[ii].y || current - row == vp[ii].x - vp[ii].y)
{
return false;
}
}
return true;
}
void NQueens(int current, int size, vector<Position>& vp, int &results)
{
if(current == size) {
results ++;
return;
}
for(int ii = 0; ii < size; ii ++) {
if(canPutQueen(current, ii, vp)) {
vp.push_back(Position(current, ii));
NQueens(current + 1, size, vp, results);
vp.pop_back();
}
}
}
public:
int totalNQueens(int n) {
vector<Position> vp;
int results = 0;
NQueens(0, n, vp, results);
return results;
}
};