폭스 시엘은 "2 점"라는 모바일 퍼즐 게임을하고있다. 기본적인 수준 크기의 기판 상에 재생되는 N × m의 이런 세포 :
각 셀은 일부 색상이있는 점을 포함합니다. 우리는 서로 다른 색상을 표현하는 다른 대문자 라틴 문자를 사용합니다.
이 게임의 핵심은 같은 색의 도트를 포함하는주기를 찾을 수 있습니다. 예로서, 원을 형성하는 화상의 푸른 4 점을 고려한다. 공식적으로, 우리는 점들의 시퀀스를 호출 거라고 1 , D 2 , ..., D 케이 는 다음 조건을 만족하는 경우에만, 사이클 :
- 이러한 k 개의 점이 상이하다 : 만약 내가 ≠ J를 다음 거라고 제가 상이한 차원 J .
- K는 적어도 4이다.
- 모든 점은 같은 색에 속한다.
- 모든 1 ≤ 난 ≤ K - 1 : (D)의 I 및 D는 I + 1 에 인접한다. 또한, d는 케이 와 (D) (1)는 또한 인접한다. 셀 X 및 Y는 그들이 경계를 공유하는 경우, 인접 불린다.
가 존재하는지 확인 필드에서주기를.
입력
첫 번째 라인은 두 정수 포함 N 과 m ( 2 ≤ N , m의 기판의 행과 열의 수 : ≤ 50).
그런 다음 n 개의 라인은 각 행은 문자열로 구성된 포함에 따라 m의 문자 각 라인에서 점의 색상을 표현합니다. 각 문자는 대문자 라틴어 문자입니다.
산출
출력 " 존재 예"경우 주기와 " 아니오"그렇지.
예
3 4
AAAA
ABCA
AAAA
예
3 4
AAAA
ABCA는
알고 있었다
아니
4 4
YYYR
BYBY
BBBY
BBBY
예
7 6
AAAAAB
ABBBAB
ABAAAB
ABABBB
ABAAAB
ABBBAB
AAAAAB
예
2 13
ABCDEFGHIJKLM
NOPQRSTUVWXYZ
아니
노트
첫 번째 샘플 테스트에서 모두 ' A'주기를 형성한다.
두 번째 샘플에서 이러한주기가 없다.
세 번째 시료 ( '위의 그림에 표시되는 Y'= 황색, ' B'= 청색, ' R'= 빨간색).
문제의 의미 문자열 배열 크기 n의 m *에 부여하고, 요청 여부 환을 구성하는 동일한 문자도 케이스 모양 하나, 즉 고리의 배열의 존재.
AAA VB에서
VB에서 ABA
AAA
(1) (2)
아이디어 : 전자는 지난 시간 BFS, 검색 할 수 있습니다 (하지만 다시 갈 수 없다) 4 주 각 지점에서 마주 표시가있는 모든 검색에 포인트.
당신이 가리 키도록 검색하면 마주 표시뿐만 아니라,이 점은 확실히이 보유하고 있음을 나타냅니다 반지를 공격 한 후 같은 색이다.
:에서 재판 https://blog.csdn.net/wyg1997/article/details/52208683
#INCLUDE <cstdio> #INCLUDE <iostream> #INCLUDE <CString을> 은 USING 스페이스 STD; INT N-, m, 숯 MP [ 55 ] [ 55 ], int로 VIS [ 55 ] [ 55 ], int로 디렉터리의 [이 . 4 ] [ 2 ] {{= - . 1 , 0 }, { 0 , 1. }, { 1. , 0 }, { 0 , - 1. }} BOOL ANS; // 그들이 지점을 통과하지 않는이 분류되었습니다 (NX, NY), 그것은 예를 증명할 수 있습니다. 무효DFS ( INT의 X, INT의 Y, INT NX, INT NY) { 경우 (힘 [X] [Y]) { ANS = 참 ; 반환 ; } 힘은 [X]는 [Y]는 = 참 ; 위한 ( int로 I = 0 ; i가 < 4 ; I ++ ) { INT XX = X + DIR [I] [ 0 ], Y YY + = DIR을 [I] [ 1 ]; 경우 (XX == NX && 전년 동기 대비 == 뉴욕)이 계속 ; 경우 (MP [XX] [YY] == MP [X] [Y]) { DFS (XX, YY, X, Y); } } } INT 의 main () { 동안 (~는 scanf ( " %의 D % d에 " , N, m)) { 위해 ( int로 I = 0 ; i가 N <; 내가 ++ ) { 는 scanf ( " %의 S ' , MP [ 나는]); } memset 함수 (마주, 거짓 , 는 sizeof (마주)); 위한 ( int로 I = 0 ; I <N는 난이 ++ ) { 대 ( INT의 J = 0 ; J <m, J ++) { 경우 (! 힘 [I] [J]) { DFS (I, J, - 1 - 1 ); // (0,0)的前一个节点为(-1, -1) } 의 경우 (ANS) { 중단 ; } } 경우 (ANS) 휴식 ; } 경우 (ANS) COUT << " 예 " << ENDL; 다른 cout과 << " 아니오 " << endl의; } 반환 0 ; }