棋盘覆盖算法c的代码
时间: 2024-09-28 14:13:37 浏览: 25
棋盘覆盖问题(如八皇后问题或汉诺塔)是一种经典的计算机科学问题,通常用递归或回溯法来解决。下面是一个简单的C语言版本的回溯法代码,用于寻找将8皇后放置在8x8的棋盘上,使得任意两个皇后都不在同一行、同一列或对角线上:
```c
#include <stdio.h>
#define N 8
int board[N]; // 0 表示空位,1 表示有皇后
// 判断是否可以在这个位置放皇后
int isSafe(int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i] == col || abs(board[i] - col) == row - i)
return 0; // 如果发现冲突,返回0
}
return 1;
}
// 回溯函数,尝试在row位置放置皇后
void solveNQueens(int row) {
if (row >= N) { // 找到解决方案,打印并结束递归
printSolution();
return;
}
// 尝试每个未占用的位置
for (int col = 0; col < N; col++) {
if (isSafe(row, col)) {
board[row] = col; // 放置皇后
solveNQueens(row + 1); // 继续下一行
board[row] = 0; // 回溯:移除皇后
}
}
}
// 打印解决方案
void printSolution() {
printf("Solution found:\n");
for (int i = 0; i < N; i++, printf("\n"))
for (int j = 0; j < N; j++)
printf("%d ", board[i] ? "Q" : ".");
}
int main() {
solveNQueens(0);
return 0;
}
```
阅读全文