#include <cstdio>
#include <math.h>
char a[20];//下标表示行,列从1开始,0表示该行没放皇后
int n,sum,count,list[11];// n 皇后
bool isLegal(int row,int col)// 判断与前面放的皇后是否冲突
{
for(int i=0;i<row;i++)
if(abs(row-i)==abs(col-a[i])||col==a[i])
return false;
return true;
}
void DFS(int row)
{
for(int i=1;i<=n;i++)
{
if(isLegal(row,i))
{
if(row+1==n)
count++;
else
{
a[row]=i;
DFS(row+1);
a[row]=0;
}
}
}
return;
}
int main()
{
for(int i=1;i<=10;i++)
{
count =0;
n=i;
a[0]=i;
DFS(0);
list[i-1]=count;
}
while(scanf("%d",&n)!=EOF&&n!=0)
{
printf("%d\n",list[n-1]);
}
return 0;
}
杭电2553
最新推荐文章于 2019-10-25 08:13:04 发布