52. N皇后 II
n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。
上圖為 8 皇后問題的一種解法。
給定一個整數 n,返回 n 皇后不同的解決方案的數量。
示例:
輸入: 4
輸出: 2
解釋: 4 皇后問題存在如下兩個不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
class Solution {
public:
int totalNQueens(int n) {
int solutions = 0;
vector<int> queue(n, -1);
recursiveFun(solutions, queue, n, 0);
return solutions;
}
void recursiveFun(int &solutions, vector<int> &queue, int n, int row)
{
if (row >= n)
{
++solutions;
}
else
{
for (int j = 0; j < n; ++j)
{
if (isValid(queue, row, j))
{
queue[row] = j;
recursiveFun(solutions, queue, n, row + 1);
}
}
}
}
bool isValid(vector<int> queue, int r, int c)
{
if (queue.empty())
return true;
for (int i = 0; i < r; ++i)
{
if (queue[i] == c || abs(i - r) == abs(queue[i] - c))
return false;
}
return true;
}
};