n皇后问题c语言代码
时间: 2024-06-18 18:05:22 浏览: 125
C语言实现n皇后问题的代码
n皇后问题是一个非常经典的算法问题,它的目标是在一个n*n的棋盘上放置n个皇后,使得每个皇后都不会互相攻击。这里给出一个基于回溯法的C语言代码实现。
```
#include <stdio.h>
#include <stdbool.h>
#define MAXN 100
int n, ans = 0; // n表示棋盘大小,ans表示解的数量
int queen[MAXN]; // 存储每一行放置皇后的列数
bool col[MAXN], diag1[MAXN * 2], diag2[MAXN * 2]; // 分别表示列、对角线1、对角线2是否有皇后
void search(int cur)
{
if (cur == n) // 找到一组解
{
ans++;
return;
}
for (int i = 0; i < n; i++) // 枚举当前行所有可能的列
{
if (!col[i] && !diag1[cur + i] && !diag2[cur - i + n]) // 当前列、对角线1、对角线2都没有皇后
{
queen[cur] = i; // 在当前行放置皇后
col[i] = diag1[cur + i] = diag2[cur - i + n] = true; // 标记当前列和两个对角线上都有皇后
search(cur + 1); // 继续搜索下一行
col[i] = diag1[cur + i] = diag2[cur - i + n] = false; // 回溯,取消标记
}
}
}
int main()
{
scanf("%d", &n);
search(0);
printf("%d\n", ans);
return 0;
}
```
阅读全文