问题:NQUEEN
N_Queen问题很有名,是在N*N的国际象棋棋盘上N个Queen无法互相攻击的问题。
给出N时,请求出放置Queen的方法数。
输入
第一行给出自然数N。(1 ≤ N ≤ 12)
输出
在第一行输出 N个Queen无法互相攻击的而放置的方法数。
案例输入
4
案例输出
2
#include <stdio.h>
int N;
int a[15][15];
int check[15];
int abs(int X){return X<0?-X:X;}
int f(int x){
if(x == N+1 ) return 1;
inti, j;
intcount = 0;
for(i=1;i<=N; i++){
for(j=1;j<x;j++)if(check[j] == i || x-j == abs(check[j]-i)) break;
if(j==x){
check[x]= i;
count+= f(x+1);
}
}
returncount;
}
int main(){
scanf("%d",&N);
intans = 0;
for(inti=1;i<=(N>>1); i++){
check[1]= i;
ans+= f(2);
}
ans<<= 1;
if(N&1){
check[1]= (N+1)>>1;
ans+= f(2);
}
printf("%d\n",ans);
return0;
}