[LeetCode] 061: N-Queens II

来源:互联网 发布:好看的网络自制剧 编辑:程序博客网 时间:2024/06/06 16:54
[Problem]

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

[LeetCode] 061: N-Queens II - coder007 - Coder007的博客


[Solution]
class Solution {
public:
/**
* if the current position is valid
*/
bool check(int pos[], int level){
for(int i = 0; i < level; ++i){
if(i + pos[i] == level + pos[level] || pos[i] - i == pos[level] - level){
return false;
}
}
return true;
}
/**
* get total number method to put N Queens
*/
int totalNQueens(int n, bool used[], int pos[], int level){
int res = 0;
// the last level
if(level == n-1){
// set the Queen in n positions
for(int i = 0; i < n; ++i){
pos[level] = i;
if(!used[i] && check(pos, level)){
res++;
}
}
}
// recursion
else{
for(int i = 0; i < n; ++i){
pos[level] = i;
if(!used[i] && check(pos, level)){
used[i] = true;
int nextRes = totalNQueens(n, used, pos, level+1);
res += nextRes;
used[i] = false;
}
}
}
return res;
}
/**
* total number of methods to put N queens
*/
int totalNQueens(int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(n <= 0)return 0;

// initial
bool used[n];
int pos[n];
memset(used, false, sizeof(used));
return totalNQueens(n, used, pos, 0);
}
};
说明:版权所有,转载请注明出处。Coder007的博客
原创粉丝点击