一、题目描述
根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。
题目链接:https://www.lintcode.com/problem/n-queens-ii/description
二、样例
例1:
输入: n=1
输出: 1
解释:
1:
1
例2:
输入: n=4
输出: 2
解释:
1:
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0
2:
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
三、代码
#include <iostream>
using namespace std;
template <class T>
class Solution
{
public:
T totalNQueens(T n)
{
count = 0;
DFS(n, 0, 0, 0, 0);
return count;
}
private:
void DFS(T n, T row, T col, T pie, T na)
{
if (row >= n)
{
count += 1;
return;
}
T bits = (~(col | pie | na)) & ((1 << n) - 1);
while (bits)
{
T p = bits & -bits;
DFS(n, row + 1, col | p, (pie | p) << 1, (na | p) >> 1);
bits &= (bits - 1);
}
}
private:
T count = 0;
};
int main()
{
int num = 0;
Solution<int> s;
while (cin >> num)
cout << s.totalNQueens(num) << endl;
return 0;
}