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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值