クイーンズブルーブリッジBASIC-27(検索)2nの基本的な演習

問題の説明

  N * Nボードを考えると、ボードは女王のいくつかの位置に置くことはできません。今までブラックボードが配置され、N及びN-クイーンホワイト女王ので、任意の2つの黒いクイーンが同じ行、同じ列または同じ対角線上にないことではなく、同じ列内の任意の2つの白の女王、同じ列や同じ対角線。Q. Aは、どのように多くのプット法の合計しますか?nは8以下です。

入力形式

  第一幕入力整数n、ボードのサイズ。
  クイーンことができない放電に対応する位置を示す、0の整数である場合、続いてN行の各行nは0又は1の整数であり、クイーンに対応する位置を示す1の整数である場合、配置することができます。

出力フォーマット

  出力アン法律を置く種の合計数を表す整数。

サンプル入力

4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

サンプル出力

2

サンプル入力

4
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1

サンプル出力

0
#include <アルゴリズム> 
の#include <iostreamの> 
する#include <CStringの> 
する#include <cstdioを> 
する#include <ベクトル> 
の#include <cmath> 
の#include <キュー> 
の#include <両端キュー> 
の#include <cmath> 
の#include <地図> 使用して名前空間はstdを、
typedefの長い長いLL。#define INF 0x7FFFFFFFで
 のconst ダブル INF = 1E20;
const int型 MAXN = 1000年 + 10 const int型のmod =

  

   1E7;
CONST  ダブル PI = ACOS( - 1 )。

int型 [ 10 ] [ 10 ]。
INT VIS [ 3 ] [ 50 ]。
INTの VIS2 [ 3 ] [ 50 ]。
int型TOT;
int型のn;
INT C [ 50 ]。

ボイド search_2(int型CUR){
     場合(CUR == N){ 
        TOT ++ 
    } 
    ほか のためintは iは= 0、I <N; I ++ ){
        もし(!VIS2 [ 0 ] [i]は&&!VIS2 [ 1 ] [CUR + I] &&!VIS2 [ 2 ] [CUR-I + N] && A [CUR] [I] == 1 ){ 
            VIS2 [ 0 ] [I] = VIS2 [ 1 ] [CUR + I] = VIS2 [ 2 ] [CUR-I + N] = 1 
            [CUR] [I] = 0 ; 
            search_2(CUR + 1 )。
            [CUR] [I] = 1 
            VIS2 [ 0 ] [I] = VIS2 [ 1 ] [CUR + I] = VIS2 [ 2 ] [CUR-I + N] = 0 ; 
        } 
    } 
} 

のボイドsearch_(INT CUR){
     場合(CUR == N){ 
        search_2(0 )。
    } 
    そう するためINT iは= 0、I <N; I ++ ){
         もし!(VIS [ 0!] [I] && VIS [ 1!] [CUR + I] && VIS [ 2 ] [CUR-I + N] && [CUR] [I] == 1 ){ 
            VIS [ 0 ] [I] = VIS [ 1 ] [CUR + I] = VIS [ 2 ] [CUR-I + N] = 1 
            [CUR] [I] = 0 ; 
            search_(CUR + 1)。
            [CUR] [I] = 1 
            VIS [ 0 ] [I] = VIS [ 1 ] [CUR + I] = VIS [ 2 ] [CUR-I + N] = 0 ; 
        } 
    } 
} 

int型のmain(){ 
    scanf関数(" %のD "、&N)
    以下のためにINT iが= 0 ; I <N; I ++ ){
         ためINT J = 0 ; J <nであり、j ++ ){ 
            scanf関数(" %のD "、および[I] [J])。
        } 
    } 
    TOT= 0 ; 
    search_(0 )。
    printf(" %dの\ n " 、TOT)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/wz-archer/p/12502376.html