c语言用递归算法求八皇后问题简单做法
时间: 2024-09-27 14:16:18 浏览: 40
在C语言中,使用递归算法解决八皇后问题是一个常见的编程挑战。八皇后问题是一个经典的问题,目标是在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不能在同一行、同一列或对角线上。以下是简单的递归解决方案:
```c
#include <stdio.h>
// 定义一个数组来表示棋盘的状态
int board[8];
// 递归函数,用于检查是否可以合法地放置皇后
void place_queen(int row, int col) {
// 如果已到达最后一行,就找到了一种解法,将结果存入数组并返回
if (row == 8) {
for (int i = 0; i < 8; i++) {
printf("%d ", board[i]);
}
printf("\n");
return;
}
// 尝试在当前列放置皇后
board[row] = col;
// 检查当前位置的上下左右四个位置是否已经有皇后
for (int i = 0; i <= row; i++) {
if (board[i] == col || abs(board[i] - col) == row - i) {
break; // 如果冲突,回溯到上一行继续尝试其他列
}
}
// 如果所有位置都检查过都没冲突,进入下一行继续放置
if (col + 1 < 8) {
place_queen(row + 1, col + 1);
} else {
// 回溯,撤销这一行的操作,从下一个位置开始
board[row] = -1;
place_queen(row + 1, 0); // 从左向右尝试放置
}
}
int main() {
// 初始化棋盘,所有位置都是未放置
for (int i = 0; i < 8; i++) {
board[i] = -1;
}
place_queen(0, 0); // 从第一行的第一列开始递归
return 0;
}
```
阅读全文