c语言八皇后问题代码
时间: 2024-09-27 21:01:53 浏览: 39
八皇后问题是一个经典的回溯算法示例,目标是在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不会在同一行、同一列或者对角线上。以下是使用C语言实现的一个简单版本的八皇后问题代码:
```c
#include <stdio.h>
#define N 8
// 检查皇后是否可以放在某一行
int is_safe(int row, int col, int board[N]) {
// 左上到右下的对角线
for (int i = 0; i < row; i++) {
if (board[i] == col || board[i] + i == col + row) {
return 0;
}
}
return 1;
}
// 八皇后问题递归解决方案
void solveNQueens(int board[N], int row) {
// 如果摆放完所有皇后,打印结果
if (row == N) {
print_board(board);
return;
}
// 遍历每一列
for (int col = 0; col < N; col++) {
// 如果当前位置安全,就放一个皇后
if (is_safe(row, col, board)) {
board[row] = col;
// 继续摆放下一行的皇后
solveNQueens(board, row + 1);
// 回溯,如果当前放置失败,则尝试下一个位置
board[row] = -1;
}
}
}
// 打印已放置皇后的棋盘
void print_board(int board[N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (board[i] == j)
printf("Q ");
else
printf(". ");
}
printf("\n");
}
}
int main() {
int board[N];
solveNQueens(board, 0);
return 0;
}
```
这个代码首先检查每个位置是否安全,然后递归地尝试在每行的不同列放置皇后。当一排的皇后都摆好后,会继续处理下一行,直到所有的皇后都找到合适的位置。
阅读全文