#include<stdio.h>
bool a[100],c[100],b[100];
int n,num;
void dfs(int i)
{
int j;
if(i==n+1)
{
num++;
}
else
{
for(j=1;j<=n;j++)
{
if(c[i+j]==true&&a[j]==true&&b[i-j+n+1]==true)
{
c[i+j]=a[j]=b[i-j+n+1]=false;
dfs(i+1);
c[i+j]=a[j]=b[i-j+n+1]=true;
}
}
}
}
int main()
{
int i,m,s[20],j;
for(j=1;j<=10;j++)
{
n=j;
for(i=1;i<=2*n;i++)
c[i]=true;//标记135度的
for(i=1;i<=n;i++)
a[i]=true;//标记竖线上的
for(i=0;i<=n+n+1;i++)
b[i]=true;//标记45度的
num=0;
dfs(1);
s[n]=num;
}
while(scanf("%d",&m),m!=0)
{
printf("%d\n",s[m]);
}
return 0;
}
hdu 2553
最新推荐文章于 2021-06-08 18:22:21 发布