回溯法求解N皇后c语言代码
时间: 2023-07-30 09:05:14 浏览: 95
以下是使用回溯法求解N皇后问题的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
int count; // 计数器
int *pos; // 用于存储每行皇后的位置
// 判断当前皇后所在位置是否可行
int is_valid(int row, int col) {
for (int i = 0; i < row; i++) {
if (pos[i] == col || row - i == abs(col - pos[i])) {
return 0;
}
}
return 1;
}
// 递归求解N皇后问题
void queen(int row, int n) {
if (row == n) {
count++; // 找到一组可行解
return;
}
for (int col = 0; col < n; col++) {
if (is_valid(row, col)) {
pos[row] = col; // 存储当前皇后的位置
queen(row + 1, n); // 递归放置下一行皇后
}
}
}
int main() {
int n;
printf("请输入N的值:");
scanf("%d", &n);
pos = (int *) malloc(n * sizeof(int));
queen(0, n); // 从第0行开始递归求解
printf("共有%d组解。\n", count);
free(pos);
return 0;
}
```
在上述代码中,我们使用一个一维数组 `pos` 来存储每行皇后的位置。递归函数 `queen` 会依次尝试放置每一行的皇后,并判断当前的位置是否合法。如果当前位置合法,则存储当前皇后的位置,并递归放置下一行的皇后。如果找到一组可行解,计数器 `count` 加一。具体实现细节可以参考代码注释。
阅读全文