n皇后求解的个数 c语言
时间: 2023-07-13 09:06:02 浏览: 42
求解n皇后问题的个数可以采用回溯算法来实现。以下是一份C语言的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
int n; // 皇后数量
int count; // 解的个数
int *pos; // 存放皇后位置的数组
// 判断在pos[row]列上是否可以摆放皇后
int check(int row)
{
for (int i = 0; i < row; i++) {
if (pos[i] == pos[row] || abs(pos[row] - pos[i]) == row - i) {
return 0;
}
}
return 1;
}
// 求解n皇后问题
void queen(int row)
{
if (row == n) { // 找到了一个解
count++;
return;
}
for (int i = 0; i < n; i++) {
pos[row] = i;
if (check(row)) {
queen(row + 1);
}
}
}
int main()
{
printf("请输入皇后数量n:");
scanf("%d", &n);
pos = (int *)malloc(n * sizeof(int));
queen(0);
printf("解的个数为:%d\n", count);
free(pos);
return 0;
}
```
该程序通过递归的方式来实现,每次尝试在当前行的每一列上放置一个皇后,如果该位置合法,则递归调用queen函数继续处理下一行,否则尝试下一列。如果找到一组合法解,则计数器加1。最终输出计数器的值即可得到n皇后问题的解的个数。