c语言n皇后问题代码
时间: 2024-09-21 18:07:28 浏览: 46
在C语言中,解决八皇后问题是一个经典的问题,涉及回溯算法。八皇后问题是找寻放置8个皇后在一个8x8的棋盘上,使得任意两个皇后都不在同一行、同一列,以及同一条对角线上。以下是简单的C语言代码实现:
```c
#include <stdio.h>
#define N 8
// 用于检查是否可以放置皇后
int isSafe(int row, int col, int board[N][N]) {
// 检查列冲突
for (int i = 0; i < row; i++) {
if (board[i][col] == 1)
return 0;
}
// 检查左上到右下对角线冲突
int diag1 = row - col + N - 1;
for (int i = 0; i < row; i++, diag1--) {
if (board[i][diag1] == 1)
return 0;
}
// 检查右上到左下对角线冲突
int diag2 = row + col;
for (int i = 0; i < row; i++, diag2++) {
if (board[i][diag2] == 1)
return 0;
}
return 1;
}
// 回溯函数
void solveNQueens(int board[N][N], int row) {
if (row == N) { // 当所有皇后都放置完毕,找到一个解
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
printf("%d ", board[i][j]);
printf("\n");
}
return;
}
// 尝试将皇后放在每一列
for (int col = 0; col < N; col++) {
if (isSafe(row, col, board)) {
board[row][col] = 1; // 设置皇后位置
solveNQueens(board, row + 1); // 继续处理下一行
board[row][col] = 0; // 如果没找到解决方案,则回溯并移除
}
}
}
int main() {
int board[N][N];
memset(board, 0, sizeof(board));
solveNQueens(board, 0);
return 0;
}
阅读全文