체스 판
조각 조각 이상 차이가 배치되지 바둑판 소정 형상 (모양이 불규칙적 일 수있다)이다. 디스플레이가 요구되는 경우 두 가지의 요구 사항은 모든 가능한 배치 방식 (C)의 K 개를 소정의 기판의 크기 및 형상을 해결 배치하는, 동일한 행 또는 보드에서 동일한 열에있는 프로그램을 배치 할 수 없다
입력
데이터의 복수의 세트를 포함하는 테스트 입력.
각 데이터의 첫 번째 줄의 공간에 의해 분리 된 두 개의 양의 정수, NK을하고, 기판의 수가 n 개 * n의 매트릭스 형으로 설명한다 나타내고, 조각을 넣어. N <= 8, K <= N
입력의 끝은 -1로 표시되는 경우 -1.
그런 다음 n 개의 라인들 바둑판 모양 설명 : N #은 보드 공간을 나타내는 라인 당 문자를 빈 영역 (여분의 빈 줄 데이터가 나타나거나 빈 열을하지 않는 보장)을 나타냅니다.
산출
데이터의 각 세트에 대해, 하나 개의 출력 라인은 출력 표시 프로그램 C (데이터 보장 C ^ 31 <2)의 번호가 부여된다.
샘플 입력
2 1
#.
. #
4 4
... #
.. #.
. # ..
# ...
-1 -1
샘플 출력
이
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 모드 1,000,000,007 (15) #DEFINE이 어떠냐 오래 오래 (16) #DEFINE의 INF의 0x3f3f3f3f . (17) 은 USING 스페이스 STD, 18은 문자 MP [ 15 ] [ 15 ] . 19 INT VIS [ 15 ]; // 컬럼 (20)는 INT , K N-, (21)는 INT의 SUM = 0 ] (22)가 무효 DFS ( INT의 X, INT의 CNT) // X 현재의 행에 대한 디스플레이의 부분의 현재 번호에 대한 탄소 나노 튜브 (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 (I는 + 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는 <I는 N- ++ ) 53 인 대 ( INT의 J = 0 ; J <N; ++ J ) 54 CIN >> MP [I] [J] 55 DFS ( 0 , 0 ); 56 } 57 COUT << 합 << ENDL; 58 } 59 }