leetcode的n皇后,自己写的代码
打断点:
第一次继续后:
第二次继续后:
为什么直接跳到return了啊?我前面的函数怎么不先执行啊?
第三次继续后:
为什么会是return后才跳到这里执行?
main函数应该没有问题:
就两句 int main(){Solution nq;nq.solveNQueens(4);}
leetcode也能ac啊?
这个先return再跳到上面超出我的认知了
(由于不能发视频,但是这里的顺序真的不是我故意弄反,它就是这样的,为什么啊?)
leetcode的n皇后,自己写的代码
打断点:
第一次继续后:
第二次继续后:
为什么直接跳到return了啊?我前面的函数怎么不先执行啊?
第三次继续后:
为什么会是return后才跳到这里执行?
main函数应该没有问题:
就两句 int main(){Solution nq;nq.solveNQueens(4);}
leetcode也能ac啊?
这个先return再跳到上面超出我的认知了
(由于不能发视频,但是这里的顺序真的不是我故意弄反,它就是这样的,为什么啊?)
基于new bing部分指引作答:
下面是答案你可以参考下
解决 N 皇后问题是一个经典的回溯算法问题。下面是一个使用 C++ 实现 N 皇后问题的示例代码:
#include <iostream>
#include <vector>
using namespace std;
bool isValid(vector<int>& queens, int row, int col) {
for (int i = 0; i < row; ++i) {
// 检查是否同列或同对角线上有皇后
if (queens[i] == col || abs(queens[i] - col) == abs(i - row)) {
return false;
}
}
return true;
}
void solveNQueens(int n, int row, vector<int>& queens, vector<vector<string>>& result) {
if (row == n) {
// 生成结果
vector<string> solution(n, string(n, '.'));
for (int i = 0; i < n; ++i) {
solution[i][queens[i]] = 'Q';
}
result.push_back(solution);
return;
}
for (int col = 0; col < n; ++col) {
if (isValid(queens, row, col)) {
queens[row] = col;
solveNQueens(n, row + 1, queens, result);
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> result;
vector<int> queens(n, -1);
solveNQueens(n, 0, queens, result);
return result;
}
int main() {
int n = 4;
vector<vector<string>> result = solveNQueens(n);
for (const auto& solution : result) {
for (const auto& row : solution) {
cout << row << endl;
}
cout << "=========" << endl;
}
return 0;
}
上面的代码使用回溯算法解决了 N 皇后问题。在 solveNQueens
函数中,通过递归实现回溯搜索。isValid
函数用于检查当前位置是否可以放置皇后。最后,将符合要求的结果存储在 result
变量中并返回。
您可以根据具体需求修改变量 n
的值来计算不同规模的 N 皇后问题。运行程序后,程序将打印出所有的解法,每个解法以二维字符矩阵的形式展示,其中 'Q' 表示皇后的位置,'.' 表示空位。
请注意,对于较大的 n 值,N 皇后问题可能会有很多解,输出结果可能会非常庞大。如果需要限制输出数量,您可以在找到足够数量的解后提前终止搜索。