問題: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;
}