皇后问题代码回溯法C语言
时间: 2024-06-13 16:01:57 浏览: 199
皇后问题是一个经典的回溯算法问题,也被称为八皇后问题,目标是在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不在同一行、同一列或同一对角线上。在C语言中,使用回溯法解决这个问题的一种常见方法是通过递归和深度优先搜索。
以下是皇后问题的基本C语言代码框架:
```c
#include <stdio.h>
#define N 8 // 棋盘大小,这里设为8皇后
int isSafe(int row, int col, int chessboard[N][N], int n) {
// 检查当前位置是否安全,不在同一行、同一列和对角线上
for (int i = 0; i < row; i++) {
if (chessboard[i][col] == 1 || // 同列
chessboard[row][i] == 1 || // 同行
abs(row - i) == abs(col - chessboard[i][i])) { // 同斜线
return 0;
}
}
return 1;
}
void solveNQueens(int chessboard[N][N], int n, int row) {
if (row == n) {
// 如果填满了一行,表示找到解
printSolution(chessboard);
return;
}
// 从第一列开始尝试
for (int col = 0; col < n; col++) {
if (isSafe(row, col, chessboard, n)) {
chessboard[row][col] = 1; // 标记位置
solveNQueens(chessboard, n, row + 1); // 递归下一层
chessboard[row][col] = 0; // 回溯,尝试下一个位置
}
}
}
void printSolution(int chessboard[N][N]) {
// 打印解决方案
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", chessboard[i][j]);
}
printf("\n");
}
}
int main() {
int chessboard[N][N] = {0};
solveNQueens(chessboard, N, 0);
return 0;
}
```
阅读全文