四皇后问题c语言代码
时间: 2024-10-01 18:00:32 浏览: 48
四皇后问题是经典的回溯算法问题,要在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)
return false;
// 检查左上对角线是否冲突
int di = row - col;
for (int i = 0; i < di; i++)
if (board[i] == col + i)
return false;
// 检查右上对角线是否冲突
di = N - row - col;
for (int i = 0; i < di; i++)
if (board[row + i] == col + i)
return false;
return true;
}
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");
}
puts("");
return;
}
for (int col = 0; col < N; col++) {
// 如果当前位置是安全的,则放置皇后
if (isSafe(row, col, board)) {
board[row][col] = col;
// 继续向下移动到下一行
solveNQueens(board, row + 1);
}
}
}
int main() {
int chessBoard[N][N];
memset(chessBoard, -1, sizeof(chessBoard)); // 初始化所有格子为-1表示未放置皇后
solveNQueens(chessBoard, 0);
return 0;
}
```
这个程序通过递归地尝试每一行每一个列放置皇后,并检查是否满足条件。当找到一种可行的布局时,它会打印出解决方案并继续寻找其他可能的解。
阅读全文