思路:直接DFS;
代码如下:
#include < cstdio >
#include < cstring >
int n,num[15],ans,cnt[15];
void df_s(int cur)
{
if(cur==n)//dfs通用类型;
{
ans++;
return ;
}
int
i,j;
for(i=0; i
< n ;i++)
{
int flag=0;//判断是否违反规则;
for(j=0; j < cur; j++)
{
if(num[j]==i||j+num[j]==cur+i||i+j==num[j]+cur)//两坐标为(i,cur),(num[j],j);
{
flag=1;
break;
}
}
if(flag==0)
{
num[cur]=i;//用行标记列;
df_s(cur+1);
}
}
return
;
}
int main()
{
memset(cnt,-1,sizeof(cnt));
while(~scanf("%d",&n)&&n)
{
if(cnt[n]!=-1)
{
printf("%d\n",cnt[n]);
continue;
}
memset(num,-1,sizeof(num));
ans=0;
df_s(0);