Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.

递归解法:
class Solution {
public:
bool check(int row, int* place)
{
for (int i = 0; i < row; ++i)
{
int diff = abs(place[i] - place[row]);
if (diff == 0 || diff == row - i)
return false;
}
return true;
}
void placeQueens(int row, int n, int &count, int* place)
{
if (row == n)
{
++count;
return;
}
for (int i = 0; i < n; ++i)
{
place[row] = i;
if (check(row, place))
placeQueens(row+1, n, count, place);
}
}
int totalNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int* place = new int[n];
int count = 0;
placeQueens(0, n, count, place);
return count;
}
};

本文介绍了一种递归算法解决N皇后问题,并计算所有可能的解决方案数量。通过检查每一行皇后的位置来确保没有冲突,该算法有效地计算了不同布局的数量。

被折叠的 条评论
为什么被折叠?



