c++八皇后问题代码
时间: 2023-12-10 20:32:37 浏览: 113
八皇后问题是一个经典的回溯算法问题,以下是一个简单的C++代码实现:
```
#include <iostream>
using namespace std;
int a[9]; // 存放每行皇后所在的列数
bool col[9], diag1[17], diag2[17]; // 判断列、对角线是否有皇后
void search(int i) {
if (i == 9) { // 找到一组解
for (int j = 1; j <= 8; j++) {
cout << a[j];
}
cout << endl;
return;
}
for (int j = 1; j <= 8; j++) {
if (!col[j] && !diag1[i+j] && !diag2[i-j+8]) { // 判断该位置是否可放置皇后
a[i] = j;
col[j] = diag1[i+j] = diag2[i-j+8] = true; // 标记该位置
search(i+1); // 继续搜索下一行
col[j] = diag1[i+j] = diag2[i-j+8] = false; // 恢复标记
}
}
}
int main() {
search(1); // 从第一行开始搜索
return 0;
}
```
该代码使用了一个一维数组`a`来存放每行皇后所在的列数,使用三个布尔型数组`col`、`diag1`、`diag2`来判断列、对角线是否有皇后。在搜索过程中,对于每一行,依次枚举每一列,判断该位置是否可放置皇后,如果可以,则标记该位置,继续搜索下一行,如果不行,则恢复标记,尝试下一个位置。当找到一组解时,输出该解即可。
阅读全文