八皇后问题C语言\\
时间: 2023-10-26 13:07:04 浏览: 81
八皇后问题是一个经典的回溯算法问题,其目标是在一个8x8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击(即不在同一行、同一列或同一对角线上)。以下是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define N 8
bool is_valid(int board[N][N], int row, int col) {
// 检查同一列是否有皇后
for (int i = 0; i < row; i++) {
if (board[i][col] == 1) {
return false;
}
}
// 检查左上方是否有皇后
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == 1) {
return false;
}
}
// 检查右上方是否有皇后
for (int i = row - 1, j = col + 1; i >= 0 && j < N; i--, j++) {
if (board[i][j] == 1) {
return false;
}
}
return true;
}
bool solve(int board[N][N], int row) {
if (row == N) {
// 找到了一组解
return true;
}
for (int col = 0; col < N; col++) {
if (is_valid(board, row, col)) {
board[row][col] = 1;
if (solve(board, row + 1)) {
return true;
}
board[row][col] = 0;
}
}
return false;
}
int main() {
int board[N][N] = {0};
if (solve(board, 0)) {
// 输出解
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
} else {
printf("No solution found.\n");
}
return 0;
}
```
该程序使用递归的方式进行搜索,每次尝试在当前行的每个位置放置皇后,如果合法则继续递归下一行,否则回溯到上一行重新尝试。当找到一组解时,程序输出棋盘上每个位置是否有皇后。
阅读全文