题意:n*n棋盘要放n个皇后,要求意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45度角的斜线上,最多几种方案
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int lca[11];//存放每行皇后位置(列数)
int count;//方案数
int n;//棋盘规模
void getcount(int row)
{
for(int i=1;i<=n;i++){
lca[row]=i;
int flag=1;
for(int j=1;j<row;j++){
if((lca[j]==lca[row])||((int)fabs(lca[row]-lca[j])==row-j))//判断同一列或者45度线上
flag=0;
}
if(flag){
if(row==n)
count++;
else
getcount(row+1);
}
}
}
int main()
{
//打表
int dfs[11];
for(int i=1;i<=10;i++){
count=0;
n=i;
getcount(1);
dfs[i]=count;
}
int number;
while(scanf("%d",&number)!=EOF&&number){
printf("%d\n",dfs[number]);
}
return 0;
}