写一个c语言代码解决八皇后问题
时间: 2024-05-09 20:17:24 浏览: 16
好的,关于八皇后问题的C语言代码可以如下实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 8 // 棋盘大小
bool check(int board[][N], int row, int col) { // 检查某个位置是否合法
for (int i = 0; i < row; i++) {
if (board[i][col] == 1) { // 检查同一列
return false;
}
if (col-i-1 >=0 && board[row-i-1][col-i-1] == 1) { // 检查左上角到右下角的斜线
return false;
}
if (col+i+1 < N && board[row-i-1][col+i+1] == 1) { // 检查右上角到左下角的斜线
return false;
}
}
return true;
}
bool solve(int board[][N], int row) { // 递归求解
if (row == N) {
return true;
}
for (int i = 0; i < N; i++) {
if (check(board, row, i)) {
board[row][i] = 1; // 放置皇后
if (solve(board, row + 1)) {
return true;
}
board[row][i] = 0; // 撤销放置的皇后
}
}
return false;
}
void printBoard(int board[][N]) { // 输出棋盘
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%c ", board[i][j] == 1 ? 'Q' : '.');
}
printf("\n");
}
}
int main() {
int board[N][N] = {0}; // 初始化棋盘
if (solve(board, 0)) { // 从第0行开始求解
printBoard(board);
} else {
printf("No solution found.\n");
}
return 0;
}
```