#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 100
int queen[N]={0};
int sum=0;
int max;//保存从文件中读入的棋盘宽度
FILE *fp1,*fp2;
bool place(int n){//此函数用来判断当前行是否可以放置皇后
for(int i=0;i<n;i++){
if(queen[i]==queen[n]||abs(n-i)==abs(queen[i]-queen[n]))
return false;
}
return true;
}
void NQueen(int n){//n皇后回溯问题
int i;
for(i=0;i<max;i++){
queen[n]=i;
if(place(n)){
if(n==max-1)sum++;//如果到结尾,则解的个数加一
else NQueen(n+1);//如果可以放置,且没到结尾则向下循环
}
}
}
int main(){
fp1=fopen("5.in","r");
fp2=fopen("5.out","w");
fscanf(fp1,"%d",&max);
NQueen(0);
fprintf(fp2,"%d",sum);
return 0;
}
int i;
for(i=0;i<max;i++){
queen[n]=i;
if(place(n)){
if(n==max-1)sum++;//如果到结尾,则解的个数加一
else NQueen(n+1);//如果可以放置,且没到结尾则向下循环
}
}
}
int main(){
fp1=fopen("5.in","r");
fp2=fopen("5.out","w");
fscanf(fp1,"%d",&max);
NQueen(0);
fprintf(fp2,"%d",sum);
return 0;
}