c语言请使用回溯算法求解n皇后问题:即 n*n棋盘上放置n个皇后
时间: 2024-04-11 12:27:40 浏览: 113
回溯算法求解n皇后问题
5星 · 资源好评率100%
当然可以!以下是使用回溯算法求解n皇后问题的C语言代码:
```c
#include <stdio.h>
#define N 10
int board[N][N];
int n;
// 检查在(x, y)位置放置皇后是否合法
int isSafe(int x, int y) {
// 检查同一列是否有其他皇后
for (int i = 0; i < x; i++) {
if (board[i][y] == 1)
return 0;
}
// 检查左上角到右下角的对角线是否有其他皇后
for (int i = x, j = y; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == 1)
return 0;
}
// 检查右上角到左下角的对角线是否有其他皇后
for (int i = x, j = y; i >= 0 && j < n; i--, j++) {
if (board[i][j] == 1)
return 0;
}
return 1;
}
// 使用回溯算法求解n皇后问题
int solveNQueens(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");
}
printf("\n");
return 1;
}
int found = 0;
for (int i = 0; i < n; i++) {
if (isSafe(row, i)) {
board[row][i] = 1;
found += solveNQueens(row + 1);
board[row][i] = 0;
}
}
return found;
}
int main() {
printf("请输入皇后的个数:");
scanf("%d", &n);
if (n > N) {
printf("皇后个数过多,无法求解!\n");
return 0;
}
int count = solveNQueens(0);
printf("共找到 %d 个解决方案。\n", count);
return 0;
}
```
你可以输入皇后的个数,程序将输出所有的解决方案。注意,由于n皇后问题的解决方案数量随着n的增加呈指数级增长,当n较大时,可能需要等待较长时间才能得到结果。希望这个代码能够帮助到你!
阅读全文