N-Queens II
问题描述:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
测试代码(C++):
int totalNQueens(int n) {
vector<bool> col(n, true);
vector<bool> anti(2*n-1, true);
vector<bool> main(2*n-1, true);
vector<int> row(n, 0);
int count = 0;
dfs(0, row, col, main, anti, count);
return count;
}
void dfs(int i, vector<int> &row, vector<bool> &col, vector<bool>& main, vector<bool> &anti, int &count) {
if (i == row.size()) {
count++;
return;
}
for (int j = 0; j < col.size(); j++) {
if (col[j] && main[i+j] && anti[i+col.size()-1-j]) {
row[i] = j;
col[j] = main[i+j] = anti[i+col.size()-1-j] = false;
dfs(i+1, row, col, main, anti, count);
col[j] = main[i+j] = anti[i+col.size()-1-j] = true;
}
}
}
测试代码(python):
class Solution(object):
def totalNQueens(self, n):
self.res = 0
self.dfs([-1]*n, 0)
return self.res
def dfs(self, nums, index):
if index == len(nums):
self.res += 1
return
for i in xrange(len(nums)):
nums[index] = i
if self.valid(nums, index):
self.dfs(nums, index+1)
def valid(self, nums, n):
for i in xrange(n):
if nums[i] == nums[n] or abs(nums[n]-nums[i]) == n-i:
return False
return True