만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

척의 도전

시간 제한1초메모리 제한512 MB

요약
열쇠, 문, 무너지는 바닥의 규칙을 따를 때 시작점에서 출구까지 가는 데 열어야 하는 문의 최소 개수를 구합니다.
난이도

보통10점 중 6점

유형
BFS, 비트 연산, 그래프, 시뮬레이션
정답자
아직 제출이 없습니다

문제

척의 도전은 격자 모양의 타일로 이루어진 미로에서 플레이어가 길을 찾아가는 게임이다. 플레이어는 도중에 얻은 열쇠로 열 수 있는 문을 만날 수도 있다. 미로의 출구에 도달하려면 반드시 열어야 하는 문의 최소 개수를 구하는 프로그램을 작성하라.

타일의미통과 가능 여부
>입구가능
<출구가능
a-z열쇠가능
A-Z문규칙에 따름
.바닥가능
+벽불가능
~불안정한 바닥규칙에 따름

규칙

  • 대각선으로 맞닿은 칸은 인접한 것으로 보지 않는다. 상하좌우로 인접한 칸만 고려한다.
  • 플레이어는 입구 칸에서 미로를 시작한다.
  • 플레이어는 현재 방문 중인 칸과 상하좌우로 인접하고 통과 가능한 칸만 방문할 수 있다.
  • 문은 대응하는 열쇠('A'는 'a', 'B'는 'b'처럼 짝을 이룬다)가 있는 칸을 방문하기 전까지 통과할 수 없다.
  • 처음에는 불안정한 바닥을 통과할 수 있다. 다만 플레이어가 불안정한 바닥을 떠나 다른 종류의 칸을 방문하면 그 바닥은 통과할 수 없게 된다.
  • 불안정한 바닥이 통과할 수 없게 되면, 인접한 불안정한 바닥도 모두 통과할 수 없게 된다.
  • 미로의 바깥 가장자리는 통과할 수 없는 벽이다.

입력

첫 줄에 테스트 케이스의 수 TT (1≤T≤501 \le T \le 50)가 주어진다. 각 테스트 케이스는 두 정수 RR과 CC (4≤R,C≤504 \le R, C \le 50)가 적힌 줄로 시작한다. 이어지는 RR개의 줄에는 미로를 나타내는 CC개의 문자가 한 줄씩 주어진다. 미로에는 위 표에 있는 문자만 나타난다.

출력

각 테스트 케이스마다 출구에 도달하기 위해 열어야 하는 문의 최소 개수를 한 줄에 출력한다. 출구에 도달할 수 없으면 "Impossible"을 출력한다.

예제1

  1. 예제 1

    입력
    2
    8 15
    +++++++++++++++
    +>............+
    +...a...+~+~+B+
    +~+++++++~+~+.+
    +~++..b..C+~+.+
    +~++A++++++~+.+
    +....~~~~~~c+<+
    +++++++++++++++
    8 6
    ++++++
    +>.A<+
    +.++++
    +.+.a+
    +~~..+
    +~~..+
    +~~..+
    ++++++
    
    예상 출력
    2
    Impossible