아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

로봇

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

요약
n개의 로봇(n <= 9)을 격자에서 하나로 합치기 위한 최소 밀기 횟수를 구한다. 로봇은 막힐 때까지 미끄러지고, 회전판에서 90도 방향을 바꾼다.
난이도

어려움10점 중 8점

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

문제

VRI(Voltron Robotics Institute)의 엔지니어들이 nn개의 로봇으로 이루어진 군집을 만들었다. 같은 칸에 있는 서로 호환되는 두 로봇은 합쳐져 하나의 합성 로봇이 될 수 있다.

로봇에는 11부터 nn까지의 번호가 붙어 있다(n≤9n \le 9). 두 로봇은 번호가 연속일 때 호환된다. 처음에 nn개의 로봇은 각각 서로 다른 하나의 번호를 가진다. 두 개 이상의 로봇이 합쳐져 만들어진 합성 로봇에는 합쳐진 로봇들의 최소 번호와 최대 번호, 두 개의 번호가 부여된다.

예를 들어 로봇 22는 로봇 33 또는 로봇 11하고만 합쳐질 수 있다. 로봇 22가 로봇 33과 합쳐지면 합성 로봇 2-3이 만들어진다. 합성 로봇 2-3이 합성 로봇 4-6과 합쳐지면 합성 로봇 2-6이 만들어진다. 모든 로봇이 합쳐지면 로봇 1-nn이 만들어진다.

엔지니어들은 nn개의 로봇을 벽으로 둘러싸인 w×hw \times h 칸짜리 방에 놓는다. 일부 칸은 막혀 있어 로봇이 들어갈 수 없다. 각 칸에는 하나 이상의 로봇이 있을 수 있고, 로봇은 항상 정확히 한 칸을 차지한다. 처음에 모든 로봇은 서로 다른 칸에 놓인다.

로봇은 단순하다. 엔지니어가 로봇을 밀면, 로봇은 x축 또는 y축을 따라 직선으로만 움직인다. 축에 평행한 네 방향 중 하나로 밀리면, 로봇은 막힌 칸이나 벽에 가로막힐 때까지 그 방향으로 계속 이동한다. 멈춘 뒤에는 같은 칸에 있는 호환되는 로봇을 찾아, 있으면 합쳐져 더 큰 로봇이 된다. 이 합체는 더 이상 합칠 수 없을 때까지 반복된다.

로봇의 방향 전환을 돕기 위해, 엔지니어들은 일부 칸에 회전판을 놓는다. 회전판은 시계 방향 또는 반시계 방향으로 돈다. 회전판이 있는 칸으로 이동해 들어온 로봇은 항상 이동 방향을 회전판과 같은 방향으로 90도 꺾는다. 회전판 위에 놓인 상태에서 밀리면, 로봇은 먼저 90도 회전한 뒤, 밀린 방향과 수직인 방향으로 직선 이동을 시작한다.

한 번에 한 로봇만 움직일 수 있다.

목표는 모든 nn개의 로봇을 하나로 합치는 데 필요한 최소 밀기 횟수를 구하는 것이다(가능한 경우).

입력

첫 번째 줄에 세 정수 nn, ww, hh가 공백으로 구분되어 주어진다.

이어지는 hh개의 줄에는 각각 방의 한 행을 나타내는 ww개의 문자가 주어진다. 각 문자는 한 칸을 의미한다.

  • 숫자('1'부터 '9')는 그 번호의 로봇이 해당 칸에서 시작함을 뜻한다.
  • 'x'는 막힌 칸을 뜻한다.
  • 'A'는 반시계 방향으로 도는 회전판이 있는 칸을 뜻한다.
  • 'C'는 시계 방향으로 도는 회전판이 있는 칸을 뜻한다.
  • '.'는 그 밖의 빈 칸을 뜻한다.

제약: n≤9n \le 9, w≤500w \le 500, h≤500h \le 500.

출력

모든 nn개의 로봇을 하나로 합치는 데 필요한 최소 밀기 횟수를 한 줄에 출력한다. 합치는 것이 불가능하면 -1을 출력한다.

힌트

첫 번째 테스트 케이스의 방에서는 다음 5번의 밀기로 모든 로봇을 최적으로 합칠 수 있다.

  1. 로봇 3을 오른쪽으로 민다. 로봇은 오른쪽으로 이동하다 회전판을 만나 반시계 방향으로 꺾여 위로 계속 이동하고, 결국 벽 앞에서 멈춘다.
  2. 로봇 4를 위로 민다. 로봇은 위로 이동해 벽 앞에서 멈추고, 로봇 3과 합쳐져 로봇 3-4가 된다.
  3. 로봇 2를 위로 민다. 로봇은 위로 이동하다 회전판을 만나 반시계 방향으로 꺾이고, 벽에 부딪혀 멈춘다.
  4. 로봇 2를 오른쪽으로 민다. 로봇은 반시계 방향으로 꺾여 위로 이동하고, 모서리에서 멈춰 로봇 1과 합쳐져 로봇 1-2가 된다.
  5. 로봇 3-4를 왼쪽으로 민다. 로봇은 왼쪽으로 이동해 모서리에서 멈추고, 로봇 1-2와 합쳐진다.

예제1

  1. 예제 1

    입력
    4 10 5
    1.........
    AA...x4...
    ..A..x....
    2....x....
    ..C.3.A...
    
    예상 출력
    5