用回溯法求解4皇后问题 【问题描述】在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。给出C++代码解决上述问题
时间: 2023-07-16 11:13:33 浏览: 129
以下是C++代码解决4皇后问题:
```cpp
#include <iostream>
using namespace std;
const int N = 4; // 棋盘边长
int cnt; // 解的个数
int queen[N]; // 记录每行皇后所在列的位置
// 判断当前位置是否合法
bool is_valid(int row, int col) {
for (int i = 0; i < row; i++) {
if (queen[i] == col || abs(queen[i] - col) == abs(i - row)) {
return false;
}
}
return true;
}
// 回溯求解
void backtrack(int row) {
if (row == N) { // 找到一组解
cnt++;
return;
}
for (int i = 0; i < N; i++) {
if (is_valid(row, i)) { // 判断当前位置是否合法
queen[row] = i; // 记录皇后所在列的位置
backtrack(row+1); // 继续搜索下一行
}
}
}
int main() {
cnt = 0;
backtrack(0);
cout << "总共有" << cnt << "种解法。" << endl;
return 0;
}
```
输出结果为:
```
总共有2种解法。
```
在N较大时,回溯算法的时间复杂度较高,不适合求解大规模的皇后问题。
阅读全文