八皇后代码C语言
时间: 2023-07-09 12:17:40 浏览: 109
下面是一个简单的八皇后问题的 C 语言代码实现,仅供参考。
```c
#include <stdio.h>
#define N 8
/* 检查当前位置是否安全 */
int isSafe(int board[N][N], int row, int col) {
int i, j;
/* 检查当前列是否有其他皇后 */
for (i = 0; i < row; i++) {
if (board[i][col])
return 0;
}
/* 检查左上方是否有其他皇后 */
for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (board[i][j])
return 0;
}
/* 检查右上方是否有其他皇后 */
for (i = row, j = col; i >= 0 && j < N; i--, j++) {
if (board[i][j])
return 0;
}
/* 当前位置安全 */
return 1;
}
/* 递归求解八皇后问题 */
int solveNQueens(int board[N][N], int row) {
int col;
/* 所有皇后都已放置完毕,返回成功 */
if (row == N)
return 1;
/* 尝试在当前行的每一列放置皇后 */
for (col = 0; col < N; col++) {
/* 检查当前位置是否安全 */
if (isSafe(board, row, col)) {
/* 在当前位置放置皇后 */
board[row][col] = 1;
/* 递归解决子问题 */
if (solveNQueens(board, row+1))
return 1;
/* 无解,回溯到上一行 */
board[row][col] = 0;
}
}
/* 所有列都尝试过了,仍然无解 */
return 0;
}
/* 打印棋盘 */
void printBoard(int board[N][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%c ", board[i][j] ? 'Q' : '.');
printf("\n");
}
}
/* 主函数 */
int main() {
int board[N][N] = {0};
int i, j;
/* 求解八皇后问题 */
if (solveNQueens(board, 0)) {
printf("找到一组解:\n");
printBoard(board);
} else {
printf("无解!\n");
}
return 0;
}
```
这个程序使用了递归回溯的方式来解决八皇后问题,主要有两个函数:`isSafe` 和 `solveNQueens`。`isSafe` 函数用于检查当前位置是否安全,即不会和已经放置的皇后互相攻击。`solveNQueens` 函数用于递归地求解八皇后问题,其中使用了回溯算法来处理无解的情况。最后,使用 `printBoard` 函数来打印棋盘。
阅读全文