#include<cstdio>
#include<cstdlib>
#include <cmath>
#define MAXN 50
int num = 0;
void NQueens(int n, int AB[], int cur) // cur == current
{
if (cur >= n)
++num;//说明已经枚举完毕,成立
else
{
for (int i = 0; i < n; i++)//遍历新一行可能的列
{
int ok = 1;
for(int j=0; j<cur; j++)//遍历已经排好的行
if (AB[j] == i || abs(cur - j) == abs(i - AB[j]))
{
ok = 0;
break;
}
if (ok)
{
AB[cur] = i;
NQueens(n, AB, cur + 1);
}
}
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n, AB[MAXN];
scanf("%d", &n);
NQueens(n, AB, 0);
printf("%d\n", num);
num = 0;
}
return 0;
}
N皇后
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 一、用枚举法实现思路:枚举所有的可能来,可以看成一个树形结构,到了叶子节点再去判断是不是可行解 二、用回溯法实现思...
- 题目描述 The n-queens puzzle is the problem of placing n quee...