题目地址: hdu 2553
直接小白书上面的回溯法 但是不知道有多少组数据 所以打一个表~
代码:
#include<iostream>
using namespace std;
int C[10];
int n;
int tot=0;
int ans[10];
void dfs(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]||C[cur]-C[j]==cur-j||C[cur]-C[j]==j-cur)
{
ok=0;
break;
}
}
if(ok) dfs(cur+1);
}
}
void pre()
{
for(int i=1;i<=10;i++)
{
n=i;
tot=0;
dfs(0);
ans[i]=tot;
}
}
int main()
{
pre();
while(cin>>n)
{
if(n==0) break;
cout<<ans[n]<<endl;
}
}