The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return the number of distinct solutions to the n-queens puzzle.
Example:
Input: 4
Output: 2
Explanation: There are two distinct solutions to the 4-queens puzzle as shown below.
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
题意:N皇后
解法:位运算。
class Solution {
public:
int totalNQueens(int n) {
int col = 0;
int pei = 0;
int nai = 0;
int count = 0;
Helper(n, count, 0, col, pei, nai);
return count;
}
void Helper(int n, int& count, int row, int col, int pei, int nai)
{
if (row >= n)
{
count++;
return ;
}
int bits = (~(col | pei | nai)) &((1 << n) - 1); //获取当前所有的空位
while(bits)
{
int p = bits & (-bits); //获取最低位的1
Helper(n, count, row+1, col | p, (pei|p) << 1, (nai|p) >> 1);
bits = bits & (bits - 1); //去掉最低位的1
}
}
};