#include <stdio.h>
#include <string.h>
#include <math.h>
int x[15],sum;
int place(int k)
{
int j;
for(j=1;j<=k-1;j++)
if(abs(x[k]-x[j])==(k-j)||x[k]==x[j])
return 0;
return 1;
}
int Nqueues(int n)
{
int k;
x[1]=0;
k=1;
while(k>0)
{
while(x[k]<=n-1)
{
x[k]+=1;
if(place(k)==1)
{
if(k==n)
sum+=1;
else
{
k+=1;
x[k]=0;
}
}
}
k-=1;
}
return sum;
}
int main()
{
int n,i;
int ans[12];
memset(x,0,sizeof(x));
memset(ans,0,sizeof(ans));
for(i=1;i<=11;i++)
{
sum=0;
ans[i]=Nqueues(i);
}
while(scanf("%d",&n)&&n)
{
printf("%d\n",ans[n]);
}
return 0;
}
hdu2533 N皇后问题
最新推荐文章于 2021-01-31 11:15:50 发布