用C语言通过回溯法写N皇后问题的程序。
时间: 2024-02-23 20:00:09 浏览: 64
好的,以下是用C语言通过回溯法写N皇后问题的程序:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAXN 20
int n; // 皇后的个数
int queen[MAXN]; // 存储皇后的位置
// 判断当前位置是否可以放置皇后
bool check(int row, int col) {
for (int i = 0; i < row; i++) {
// 判断是否在同一列或对角线上
if (queen[i] == col || row - i == col - queen[i] || row - i == queen[i] - col)
return false;
}
return true;
}
// 递归求解N皇后问题
void dfs(int row) {
if (row == n) { // 找到一组可行解
// 输出皇后的位置
for (int i = 0; i < n; i++)
printf("%d ", queen[i] + 1);
printf("\n");
return;
}
for (int col = 0; col < n; col++) {
if (check(row, col)) { // 当前位置可放置皇后
queen[row] = col;
dfs(row + 1); // 继续搜索下一行
}
}
}
int main() {
printf("请输入皇后的个数:");
scanf("%d", &n);
dfs(0); // 从第0行开始搜索
return 0;
}
```
程序中使用了一个 `check()` 函数来判断当前位置是否可以放置皇后,如果可以放置则继续搜索下一行,否则回溯到上一行重新选择位置。当搜索到第 `n` 行时找到一组可行解,输出皇后的位置。
注意:这里的皇后位置是从0开始计数的,输出时需要加1。
阅读全文