参考:http://blog.csdn.net/helloworld10086/article/details/38487585
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553
#include <stdio.h>
int n;
int tot;
int C[20];
int result[20];
void search(int cur)
{
if(cur == n)
tot++;
else
for(int i = 0; i <n; ++i)
{
int ok = 1;
C[cur] = i;
for(int j = 0; j < cur; ++j)
if(C[cur] == C[j] || cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j])
{
ok = 0;
break;
}
if(ok)
search(cur+1);
}
}
int main()
{
for(int i = 1; i <= 11 ; ++i)//一定要打表,否则会超时
{
n = i;
tot = 0;
search(0);
result[i] = tot;
}
while(scanf("%d",&n) && n != 0)
printf("%d\n",result[n]);
return 0;
}