JZOJ 3422. [NOIP2013 시뮬레이션] 아쿠아 댄스

시간 제한 : 1000 MS 메모리 제한 : 26만2천1백44킬로바이트 자세한 제한 

기술

아쿠아 생일 선물로 격자 모양의 화려한 카펫 왔으며,보다 구체적으로 그리드에 카펫의 색상이 쇄도 변경할 수 있습니다.

그녀의 우상 무지개 고양이를 기쁘게하기 위해, 아쿠아 ~ ~ ~ 멩을 판매하는 카펫에 빛의 춤을 춤을하기로 결정

격자 무늬 카펫 대신 N 행과 N 열, 0 ~ 5 사이의 숫자와 각 격자를 가지고 그 색상.

아쿠아은 5 0 사이의 색상을 선택할 수 있으며, 그리드 그녀가 선택한 모든 색상이 될 곳 부드럽게 치고 단계는 차이나 유니콤은 그리드의 카펫의 왼쪽 위 모서리를 차단합니다. 두 셀의 공통 에지와 동색 : 여기서 상기 통신은 다음과 같이 정의된다.

아쿠아 춤을 회피 캐스팅되어 있기 때문에, 너무 많은 화나는를 소비하지 않기 위해, 그녀는 위해 적어도 모든 그리드 색상이 동일하게 설정하는 방법을 여러 단계를 알고 싶어.

입력

각각의 테스트 사이트 데이터의 복수의 세트를 포함한다.

각 데이터 세트의 첫 번째 라인은 정수 N, N 개의 행과 N 열 그리드 스톨이다.

다음에, N * N 행렬의 수는 각각, 매트릭스가 0, 5, 각 계통의 색 사이에있다.

N = 0이 입력의 종료를 나타낸다.

산출

각 시험 출력 정수, 단계의 최소 개수를 나타낸다.

샘플 입력

2 
0 0 
0 0
3
0 1 2
1 1 2
2 2 1
0

샘플 출력

0 
3

데이터 제약

데이터의 30 %, N <= 5

는 데이터의 50 %, N <= 6

데이터의 70 %, N <= 7

데이터의 100 %, N <= 8 이상 20 당 실험군 데이터입니다.
1 #INCLUDE <iostream>
 2 #INCLUDE <STDIO.H>
 3 #INCLUDE < 문자열 .H>
 4  이용한  스페이스 성병;
5  INT     XX [ 4 ] = { 0 , 0 , - 1 , 1 };
6  의 INT     전년 [ 4 ] = { 1 - 1 , 0 , 0 };
7  int로     A [ 10 ] [ 10 ] 힘 [ 10 ] [ 10 ], E [ 6 ]
8 INT의     N, 플래그, D;
(9)  보이드 색상 ( INT (X), INT의 Y, INT COL)
 (10)  {
 도 11      의 VI [X] [Y] = 1 ;
(12)      에 대한이 ( int로 I = 0 ; i가 < 4 ; i가 ++ )
 13      {
 14          INT NX = XX X + [I], NY = Y + YY [I];
15          의 경우 (NX < 1 || NX> N NY || < 1 || NY> N || 힘 [NX] [뉴욕] == 1 )
 16              계속 ;
17          힘 [NX] [뉴욕] = 2 ;
18          의 경우 (a [NX] [뉴욕] == COL)
 (19)              색상 (NX, NY, COL);
20      }
 21  }
 22  INT EVA ( INT S)
 23  {
 24      INT에서 CNT = 0 ;
25      memset 함수 (즉, 0 , sizeof 연산자 (E));
(26)      에 대한이 ( int로 I = 1 ; i가 N = <; I ++ )
 27           ( INT J = 1 ; J <= N; J ++ )
 (28)              의 경우 ! (힘 [I] [J] = 1 ! && E [A [I [J])
29                  E [A [I] [J]] = 1 , CNT ++ ;
30      (CNT);
31  }
 32  부울 판사 ( INT COL)
 33  {
 34      INT의 TMP = 0 ;
(35)      에 대한이 ( int로 I = 1 ; i가 N = <; I ++ )
 36           ( INT J = 1 ; J <= N; J ++ )
 (37)              의 경우 (a [I] [J] == COL && 힘 [I] [J] = = 2 )
 38              {
 39                  TMP ++ ;
(40)                 컬러 (I, J, COL);
41              }
 42       (TMP> 0 );
43  }
 44  보이드 검색 ( INT의 S)
 45  {
 46      INT의 TMP = EVA (S) t [ 10 ] [ 10 ];
(47)      의 경우 (TMP의 == 0 )
 48      {
 49          플래그 = 1 ;
50          ;
51      } 다른  경우 (TMP + S> D)
 52          리턴 ;
(53)      에 대한( int로 I = 0 ] = 1은 < 5 ; 내가 ++ )
 54      {
 55          를 memcpy (t, 힘, 는 sizeof (t))를;
56          의 경우 (판단 (I))
 57              검색 (들 + 1 );
58 개          를 memcpy (힘, t, 는 sizeof (힘));
(59)          만약 (플래그)
 60              리턴 ;
61      }
 62  }
 63  INT 의 main ()
 64  {
 65      동안 (는 scanf ( " %의 D ' , N)! = EOF && N)
66      {
 67          플래그 = 0 ; memset 함수 (힘, 0 , 는 sizeof (힘));
(68)          에 대한이 ( int로 I = 1 ; i가 N = <I ++ )
 69               ( INT J = 1 J ++; J <= N )
 70                  CIN >> A [I] [J]
(71)          컬러 ( 1 , 1 , A [ 1 ] [ 1 ]);
72           (d = 0 , D> = 0 , D ++ )
 73          {
 74             검색 ( 0 );
75              의 경우 (플래그)
 76              {
 77                  COUT << D << ENDL;
78                  체류 ;
79              }
 80          }
 81      }
 82      반환  0 ;
83 }

추천

출처www.cnblogs.com/anbujingying/p/11297589.html