¿La página no carga? Prueba haciendo clic aquí.
Placeholder

#1800

포탈2 1s 256MB

Problemas

포탈은 1인칭 퍼즐 게임으로, 이 게임의 주인공은 벽에 두 개의 포탈을 만들어서, 

한쪽 포탈에 들어가면 반대쪽 포탈로 나올 수 있다. 이 문제는 비슷한 아이디어에서 출발한다.   (R, C) 크기의 격자판이 있다. 당신은 이 격자판 어딘가에 위치해 있고, 또 다른 위치에는 맛있는 케이크가 놓여져 있다. 

당신은 매우 배가 고프기 때문에 최대한 빨리 이 케이크를 먹고 싶어한다. 

당신은 현재 위치에서 동서남북 네 방향으로 이동할 수 있으며, 당신에게는 포탈총이 있어 포탈을 만들어서 이동할 수도 있다.   당신은 포탈총을 이용하여 두 가지 포탈 (노란색, 파란색)을 만들 수 있으며, 무조건 직진하는 성질을 가지고 있다. 

또한 케이크가 있더라도 그대로 투과하는 성질을 가지고 있다. 

다만 포탈총은 동서남북 네 방향으로만 발사할 수 있다.   노란색과 파란색 포탈을 만들었다면, 당신은 이 포탈을 통해 이동할 수 있다. 

노란색 포탈로 들어갔다면 파란색 포탈로 나오게 되며, 그 반대의 경우도 성립한다. 

당신은 포탈총을 사용함으로써 더 빨리 케이크를 먹을 수 있게 될 수 있을 것이다! 

아래의 그림을 살펴보자.

 

회색 칸은 벽을 나타내고 흰색 칸은 아무것도 없는 빈 공간을 나타낸다. 또한 빨간색 점은 당신의 위치이다.

 

오른쪽을 향해 파란색 포탈 건을 발사하면 위의 그림과 같이 파란색 포탈이 생긴다.

 

아래쪽을 향해 노란색 포탈 건을 발사한 후의 상태이다.

 

남쪽으로 한번 이동하였다.

 

한번 더 남쪽으로 이동하였다. 아래쪽의 노란색 포탈을 통해 파란색 포탈로 순간이동하게 되었다.

 

똑같은 색깔의 포탈은 최대 1개만 존재한다. 현재 위치에서 파란색 포탈을 왼쪽으로 쏘면 위의 그림과 같이 된다.

 

포탈은 무조건 벽에만 만들 수 있으며, 포탈이 없는 벽으로는 이동할 수 없다. 

포탈 건을 사용하는 것은 이동횟수로 세지 않는다고 가정한다. 

케이크를 먹을 수 있는 최소 이동횟수를 구하시오.

 


Entrada

입력의 첫 행에는 테스트 케이스의 수 N( 1 <= N <= 5)이 입력된다.

각 테스트 케이스의 첫 번째 줄에는 정수 R C (1 <= R, C <= 15)가 공백을 사이에 두고 주어진다. 

맵은 R개의 행과 각 행마다 C개의 문자로 구성되며, 다음과 같은 문자가 주어진다. 

 

'.' : 비어있는 공간을 뜻함  

'#' : 해당 위치에 벽이 있음을 뜻함 

'O' : 해당 위치에서 시작을 함을 듯함 

'X' : 케이크가 있는 위치를 뜻함.

 

'O'와 'X는 반드시 하나만 존재한다. 격자 밖의 칸들은 모두 벽이라고 가정하며 여기에 포탈을 만들 수도 있다.


Salida

각 테스트 케이스에 대하여 출력 예 형식에 맞추어 시작위치에서 케이크까지 도달하기 위한 최소한의 이동횟수를 출력한다. 도달이 불가능한 경우 "THE CAKE IS A LIE"(따옴표 제외)를 출력한다.

Ejemplo

3

4 7
.O..##.
.#.....
.#.####
.#...X.
5 5
O....
.....
.....
.....
....X
1 3
O#X
Case #1: 4

Case #2: 2
Case #3: THE CAKE IS A LIE


Fuente

GCJ 2008 R3
Debes iniciar sesión para escribir código.