深搜的判断标准
hang[i]=j表示第i行的皇后在j列
新皇后的hang[i]与之前每一行列数都不一样,且和之前每一个皇后都不在一个斜线
for( i=1;i<=n;i++)
{
for(j=1;j<x;j++)
{
if(i==hang[j]||(abs(x-j)==abs(i-hang[j])))
{
break;
}
}
if(j==x)
{
hang[x]=i;
dfs(x+1);
}
}
#include<bits/stdc++.h>
using namespace std;
int n,cnt;
int visit[16][16]={0};
int hang[16]={0};
void dfs(int x)
{
if(x>n)
{
cnt++;
return ;
}
int i,j;
for( i=1;i<=n;i++)
{
for(j=1;j<x;j++)
{
if(i==hang[j]||(abs(x-j)==abs(i-hang[j])))
{
break;
}
}
if(j==x)
{
hang[x]=i;
dfs(x+1);
}
}
return ;
}
/*int main()
{
freopen("C:\\Users\\Lenovo\\Desktop\\input.txt","r",stdin);
freopen("C:\\Users\\Lenovo\\Desktop\\output.txt","w",stdout);
while(~scanf("%d",&n)&&n)
{
memset(hang,0,sizeof(hang));
cnt=0;
for(int i=1;i<=n;i++)
{
hang[1]=i;
dfs(2);
}
printf("%d,",cnt);
}
return 0;
}*/
int main()
{
int ans[20]={0,1,0,0,2,10,4,40,92,352,724,2680,14200,73712,365596,2279184,};
while (~scanf("%d",&n)&&n)
{
printf("%d\n",ans[n]);
}
}