チェス盤
チェッカーボードにおいて片、個ない差の上方に配置さ(形状が不規則であってもよい)の形状を与えられ。任意の二枚の表示が要求される場合、同じ行またはボードにおいて同一列に配置することができない、所与の基板サイズ及び形状を解決するためのプログラムの要件は、すべての可能な配置スキーム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
トピックリンク:
https://vjudge.net/problem/POJ-1321
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <fstreamの> 4の#include <アルゴリズム> 5の#include <cmath> 6の#include <両端キュー> 7の#include <ベクトル> 8の#include <キュー> 9#含む< ストリング > 10の#include <CStringの> 11の#include <地図> 12の#include <積層> 13の#include < 設定 > 14 の#define MOD十億七 15 の#defineが長い長いっ 16 の#define INF 0x3f3f3f3f 17 使用して 名前空間STD; 18である チャー MP [ 15 ] [ 15 ]; 19 INT VIS [ 15 ]; // カラム 20は 、INT 、K N-; 21である INT SUM = 0 ; 22である ボイド DFS(INT X、INT CNT)// X現在の行のために、ディスプレイのピースの現在の数のCNT 23は、 { 24 IF(CNTは== K) 25 { 26である SUM ++ ; 27 } 28 のために(INT I = X; I <N-; I ++ ) 29 { 30 のために(INT J = 0 ; J <N-; J ++ ) 31である { 32 IF(MP [I] [J] == ' #' && VIS [J] == 0)//はこのカラム通過判断 33である { 34は VIS [J] = 1 ; 35 (私は+ DFS 1。、CNT + 1 ); 36 VIS [J]が= 0 ; 37 } 38である } 39 } 40 } 41は 、INT (メイン) 42である { 43は 、一方(CIN >> N- K) 44である { 45 IF(N - == - 1 - && K == 1。 ) 46が BREAK 、 47 他の 48 { 49 // 毎更新する 50 SUM = 0 ; 51である のmemset(VIS、0、はsizeof (VIS)); 52である ため(intは = I 0 ; Iは<N-Iが++ ) 53であります 用(INT J = 0 ; J <N; J ++ ) 54 CIN >> MP [I] [J]。 55の DFS(0、0 ); 56 } 57 COUT <<和<< ENDL。 58 } 59 }