http://acm.hdu.edu.cn/showproblem.php?pid=2553
如上图:
#include<stdio.h>
#include<string.h>
int sum,n,hang[15],xie1[25],xie2[25];
void DFS(int i)
{
int j;
if(i>n) sum++;
else
{
for(j=1;j<=n;j++)
{
if(!hang[j]&&!xie1[i+j]&&!xie2[n-i+1+j]) //列、对角线
{
hang[j]=1;
xie1[i+j]=1;
xie2[n-i+1+j]=1;
DFS(i+1);
hang[j]=0;
xie1[i+j]=0;
xie2[n-i+1+j]=0;
}
}
}
}
int main()
{
int i,a[15];
for(i=1;i<=10;i++)
{
sum=0;n=i;
memset(hang,0,sizeof(hang));
memset(xie1,0,sizeof(xie1));
memset(xie2,0,sizeof(xie2));
DFS(1);
a[i]=sum;
}
while(scanf("%d",&n)!=EOF&&n)
{
printf("%d\n",a[n]);
}
return 0;
}