元トピックをリンク:https://vjudge.net/contest/331118#problem/B
チェッカーボードにおいて片、個ない差の上方に配置さ(形状が不規則であってもよい)の形状を与えられ。任意の二枚の表示が要求される場合、同じ行またはボードにおいて同一列に配置することができない、所与の基板サイズ及び形状を解決するためのプログラムの要件は、すべての可能な配置スキームCのk個を配置すること
入力
データの複数のセットを含むテスト入力。
各データの最初の行は、スペースで区切られた2つの正の整数、NKを、であり、ボードの数はn * nのマトリックスで説明を示し、及び片を置きます。N <= 8、K <= N
の入力端が-1で表される場合-1。
その後、n行市松模様の形状について説明:N#は基板面積を表す行あたりの文字を、空白領域(余分な空白行のデータが表示されるか、空欄ないことが保証されている)を示しています。
各データの最初の行は、スペースで区切られた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 ; }