C语言中,使用栈完成八皇后问题,输出全部代码
时间: 2024-10-14 19:07:59 浏览: 34
在C语言中,八皇后问题是一个经典的回溯算法示例,通常我们会用数组来模拟棋盘,栈则用于记录当前状态的回溯过程。以下是一个简单的C代码实现八皇后问题的例子:
```c
#include <stdio.h>
#define N 8
// 检查是否可以在行i和列j的位置放置皇后
int is_safe(int board[N], int row, int col) {
for (int i = 0; i < col; i++) {
if (board[i] == row || // 对角线
abs(board[i] - row) == col - i) return 0;
}
return 1;
}
// 回溯函数,寻找解决方案并递归尝试其他位置
void solve_n_queens(int board[N], int col, int n) {
if (col >= n) { // 找到解决方案,打印出来
for (int i = 0; i < n; i++)
printf("%d ", board[i]);
printf("\n");
return;
}
// 从第一行开始尝试
for (int i = 0; i < n; ++i) {
if (is_safe(board, i, col)) {
board[col] = i; // 放置皇后
solve_n_queens(board, col + 1, n); // 递归处理下一行
board[col] = -1; // 移除皇后恢复状态,准备继续尝试其他位置
}
}
}
int main() {
int board[N] = {-1};
solve_n_queens(board, 0, N);
return 0;
}
```
阅读全文