vjudgeボード

元トピックをリンク:https://vjudge.net/contest/331118#problem/B

 

チェッカーボードにおいて片、個ない差の上方に配置さ(形状が不規則であってもよい)の形状を与えられ。任意の二枚の表示が要求される場合、同じ行またはボードにおいて同一列に配置することができない、所与の基板サイズ及び形状を解決するためのプログラムの要件は、すべての可能な配置スキームCのk個を配置すること

入力

データの複数のセットを含むテスト入力。
各データの最初の行は、スペースで区切られた2つの正の整数、NKを、であり、ボードの数はn * nのマトリックスで説明を示し、及び片を置きます。N <= 8、K <= N
の入力端が-1で表される場合-1。
その後、n行市松模様の形状について説明:N#は基板面積を表す行あたりの文字を、空白領域(余分な空白行のデータが表示されるか、空欄ないことが保証されている)を示しています。

出力

データの各セットに対して、出力の一行は、出力表示プログラムC(データ保証C <2 ^ 31)の数が与えられます。

サンプル入力

2 1 
#。
。#
4 4 
...#
..#。
。#.. 
#... 
-1 -1

サンプル出力

2 
。1つの

コード:
する#include <stdio.hに> 
する#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの>
 整数N、K。
チャー G [ 10 ] [ 10 ]。
BOOL VIS [ 10 ]。
int型の合計、J。
ボイド DFS(INT X){
     場合(jは== K){ 
        合計 ++ 返します//  
    }
     場合(X> = N)を返します以下のためにint型私= 0 ; iがN <; I ++){
         場合(G [X] [I] == ' '!&& VIS [I] && x> = 0 && X <N){ // 是都在同一列 
            J ++ 
            VIS [i]は = ; 
            DFS(X + 1 )。
            VIS [i]は = ; 
            J - ; 
        } 
    } 
    DFS(X + 1 )。// 
} 
int型のmain(){
     int型 B [ 10 ]。
    長い 長い   Z = 0 一方、(〜のscanf(" %D%dの"、&​​N&K)){
         場合( - N == 1 && K == - 1ブレークINT X = 0 ; X <N; X ++ ){ 
            scanf関数(" %sの" 、G [X])。
        } 
        DFS(0 )。
        B [Z] = 合計。
        Z = Z + 1 
        合計 = 0 ; 
    } 
    のためのINT I = 0;私は、z <; iは++ 
    のprintf(" %LLDする\ n " 、B [I])。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/QingyuYYYYY/p/11628080.html