原题:
解决方法:
跟前面一道题的解题思路完全一样,而且只需要将结果保存到一个数组里面,最后返回数组的大小即可。
代码:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
解决方法:
跟前面一道题的解题思路完全一样,而且只需要将结果保存到一个数组里面,最后返回数组的大小即可。
代码:
bool isValid(vector<int>& queens, int row, int col) {
for (int i = 0; i < row; i++) {
if (queens[i] == -1)
continue;
if (col == queens[i])
return false;
if (abs(row - i) == abs(queens[i] - col))
return false;
}
return true;
}
void generate(vector<vector<int>>& list, vector<int>& queens, int row){
if (row >= queens.size()){
list.push_back(queens);
return;
}
for(int i = 0; i < queens.size(); i++){
if (isValid(queens, row, i)){
queens[row] = i;
generate(list, queens, row + 1);
}
}
}
int totalNQueens(int n) {
if(n == 1)
return 1;
else if (n < 4)
return 0;
vector<vector<int>> list;
vector<int> queens(n, -1);
generate(list, queens, 0);
return list.size();
}