c++如何写八皇后代码
时间: 2023-10-18 18:07:42 浏览: 91
八皇后问题是一个经典的回溯算法问题。以下是一种常见的 C 语言实现:
```
#include <stdio.h>
#include <stdbool.h>
#define N 8
bool check(int board[N][N], int row, int col) {
int i, j;
// 检查同一列是否有皇后
for (i = 0; i < row; i++) {
if (board[i][col]) {
return false;
}
}
// 检查左上方是否有皇后
for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (board[i][j]) {
return false;
}
}
// 检查右上方是否有皇后
for (i = row, j = col; i >= 0 && j < N; i--, j++) {
if (board[i][j]) {
return false;
}
}
return true;
}
bool solve(int board[N][N], int row) {
int col;
if (row == N) {
// 打印解决方案
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
return true;
}
for (col = 0; col < N; col++) {
if (check(board, row, col)) {
board[row][col] = 1;
if (solve(board, row + 1)) {
return true;
}
board[row][col] = 0;
}
}
return false;
}
int main(void) {
int board[N][N] = {0};
solve(board, 0);
return 0;
}
```
该程序使用二维数组 `board` 存储棋盘状态,`solve` 函数使用递归实现回溯算法,`check` 函数用于检查当前位置是否可以放置皇后。在 `solve` 函数中,首先检查是否已经放置了 8 个皇后,如果是则打印解决方案并返回 true。否则,尝试在当前行的每一个位置放置皇后,如果放置成功则递归调用 `solve` 函数解决下一行的问题,如果下一行无法解决则回溯到当前行重新尝试其他位置。
阅读全文