N_Queen



問題:NQUEEN

N_Queen問題很有名,是在N*N的國際象棋棋盤上NQueen無法互相攻擊的問題。

給出N時,請求出放置Queen的方法數。

 

輸入

第一行給出自然數N(1 ≤ N ≤ 12)

輸出

在第一行輸出 NQueen無法互相攻擊的而放置的方法數

 

案例輸入

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;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章