홀레독스 이동

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

요약
길이 8 이하의 뱀이 격자 미로에서 돌을 피해 머리를 출구 (1,1)까지 옮기는 최소 이동 횟수를 구한다. 이동 시 꼬리 칸도 막힌 것으로 취급한다.
난이도

어려움10점 중 8점

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

문제

홀레독스는 미로에 사는 작은 뱀이다. 미로는 n×mn \times m 칸으로 이루어진 격자이며, 각 칸은 돌이거나 빈 칸이다. 홀레독스는 빈 칸으로만 이동할 수 있다. 각 칸은 (행, 열)로 나타내며, 미로의 출구는 칸 (1, 1)이다.

홀레독스의 몸은 길이가 LL이고, 블록 단위로 B1(r1,c1) B2(r2,c2) … BL(rL,cL)B_1(r_1, c_1)\ B_2(r_2, c_2)\ \ldots\ B_L(r_L, c_L)와 같이 표현한다. 모든 1≤i≤L−11 \le i \le L-1에 대해 BiB_i는 Bi+1B_{i+1}과 인접하며, B1B_1은 머리, BLB_L은 꼬리이다.

한 번 이동할 때, 홀레독스는 머리와 인접한 칸 중에서 비어 있는 칸 하나를 고른다. 즉 그 칸은 돌이 아니어야 하고, 꼬리를 포함하여 몸의 어떤 블록도 현재 그 칸을 차지하고 있지 않아야 한다. 머리를 그 칸으로 옮기면서, 동시에 나머지 모든 블록은 자기 바로 앞 블록이 방금 떠난 칸으로 미끄러져 들어간다. 즉 B2B_2는 B1B_1이 있던 칸으로, B3B_3은 B2B_2가 있던 칸으로, 이런 식으로 BLB_L까지 이동한다.

예를 들어 몸이 B1(4,1) B2(4,2) B3(3,2) B4(3,1)B_1(4,1)\ B_2(4,2)\ B_3(3,2)\ B_4(3,1)이라고 하자. 머리가 이동할 수 있는 칸이 (5,1)(5,1)뿐이라면, 한 번 이동한 뒤 몸은 B1(5,1) B2(4,1) B3(4,2) B4(3,2)B_1(5,1)\ B_2(4,1)\ B_3(4,2)\ B_4(3,2)가 된다.

미로와 홀레독스의 모든 블록의 처음 위치가 주어질 때, 머리가 출구 (1, 1)에 도달하기 위해 필요한 최소 이동 횟수를 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫 줄에는 세 정수 nn, mm (1≤n,m≤201 \le n, m \le 20)과 LL (2≤L≤82 \le L \le 8)이 주어진다. 각각 미로의 행 수, 열 수, 홀레독스의 몸 길이이다. 이어지는 LL개의 줄에는 각각 행과 열이 주어지며, B1(r1,c1)B_1(r_1,c_1)부터 BL(rL,cL)B_L(r_L,c_L)까지의 처음 위치를 순서대로 나타낸다. 이때 1≤ri≤n1 \le r_i \le n, 1≤ci≤m1 \le c_i \le m이다. 다음 줄에는 돌의 개수 KK가 주어지고, 이어지는 KK개의 줄에는 각 돌의 행과 열이 주어진다.

인접한 테스트 케이스는 빈 줄로 구분된다. 입력의 끝은 세 개의 0으로 이루어진 줄로 표시된다.

1≤i≤L−11 \le i \le L-1인 모든 ii에 대해 BiB_i는 Bi+1B_{i+1}과 인접함이 보장되며, 출구 칸 (1, 1)은 절대 돌이 아니다.

출력

각 테스트 케이스마다 한 줄에 Case X: S를 출력한다. 여기서 XX는 테스트 케이스 번호(1부터 시작)이고, SS는 머리가 출구에 도달하기 위한 최소 이동 횟수이다. 머리가 출구에 절대 도달할 수 없으면 SS 자리에 -1을 출력한다.

힌트

첫 번째 예제에서 머리의 최적 경로 중 하나는 (4,1)→(5,1)→(5,2)→(5,3)→(4,3)→(4,2)→(4,1)→(3,1)→(2,1)→(1,1)(4,1) \to (5,1) \to (5,2) \to (5,3) \to (4,3) \to (4,2) \to (4,1) \to (3,1) \to (2,1) \to (1,1)이며, 이동 횟수는 9이다. 머리가 처음에 (3,1)(3,1)로 이동할 수 없음에 유의하라. 그 칸은 곧 꼬리가 떠날 칸이지만, 이동하는 순간에는 여전히 꼬리가 차지하고 있기 때문이다.

예제1

  1. 예제 1

    입력
    5 6 4
    4 1
    4 2
    3 2
    3 1
    3
    2 3
    3 3
    3 4
    
    4 4 4
    2 3
    1 3
    1 4
    2 4
    4
    
    2 1
    2 2
    3 4
    4 2
    
    0 0 0
    
    예상 출력
    Case 1: 9
    Case 2: -1