用递归算法求解八皇后问题C语言编程
时间: 2024-10-17 10:09:53 浏览: 57
八皇后问题是经典的回溯法(Backtracking)的应用,涉及在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不在同一行、同一列或对角线上。以下是使用C语言递归算法解决八皇后问题的一种基本思路:
```c
#include <stdio.h>
#define N 8
// 用于存储棋盘状态,0表示空位,1表示有皇后
int board[N][N];
// 检查当前位置是否可以放置皇后
int isSafe(int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i][col] || // 对于当前行的其他列
(row - i == col || // 上对角线
row + i == col)) { // 下对角线
return 0;
}
}
return 1;
}
// 递归函数,尝试在指定行放置皇后
void solveNQueens(int row) {
if (row == N) { // 如果放置完所有皇后,解决方案存在
printSolution(); // 打印解决方案
return;
}
// 遍历每一列,尝试在此位置放置皇后
for (int col = 0; col < N; col++) {
if (isSafe(row, col)) {
board[row][col] = 1; // 将皇后放在该位置
solveNQueens(row + 1); // 继续在下一行寻找解决方案
board[row][col] = 0; // 回溯,如果找不到就移除
}
}
}
// 打印解决方案
void printSolution() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
int main() {
solveNQueens(0);
return 0;
}
阅读全文