#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
//queen的坐标为(a[col],col)
int a[20],k,answer;
//利用递归
void dfs(int col)
{
if(col==k+1)//最后若递归结束时col+1 使得col=k+1
{
answer++;
return;
}
for(int i=1;i<=k;i++)//循环col下的每一行
{
int j;
for(j=1;j<col;j++)//判断有无冲突
{
if(a[j]==i||abs(col-j)==abs(a[j]-i))//不能处于同一列或该点前的对角线y=x或y=-x
break;
}
if(col==j)
{
a[col]=i;
dfs(col+1);
}
}
}
int main()
{
int q;
cin>>q;
while(q--)
{
answer=0;
cin>>k;
dfs(1);
printf("%d\n",answer);
}
return 0;
}
18124N皇后
最新推荐文章于 2021-06-05 20:46:58 发布