中文题。
这个题只需要求10以内的N皇后问题,可以预处理之后直接查询。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int queen[20];
int n,ans;
int yes(int h, int i)
{
for (int ii = 1; ii < h; ii++)
{
if(abs(queen[ii] - i) == abs(h - ii)||queen[ii] == i || h == ii)
return 0;
}
return 1;
}
void dfs(int h)
{
if(h == n + 1)
{
ans++;
return ;
}
for(int i = 1; i <= n; i++)
{
if(yes(h,i))
{
queen[h] = i;
dfs(h + 1);
}
}
}
int main()
{
int num[11];
memset(num,0,sizeof num);
for (int i = 1; i <= 10; i++)
{
ans = 0;
n = i;
dfs(1);
num[i] = ans;
}
while(~scanf("%d",&n) && n)
{
printf("%d\n",num[n]);
}
}