만드는 중입니다

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

무덤 탐험가

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

요약
거울과 장애물이 있는 격자에서 모든 석상의 면이 다른 석상의 면을 볼 수 있도록 회전해야 하는 석상의 최소 개수를 구합니다.
난이도

어려움10점 중 9점

유형
그래프, BFS, 행렬
정답자
아직 제출이 없습니다

문제

후(Hu)는 새로운 무덤에 들어갔다. 무덤 안은 가고일, 거울, 장애물로 가득하다. 보물을 지키는 문이 있고, 후는 이 문을 열어야 한다. 문에는 고대 문자로 문을 여는 비밀이 적혀 있다.

모든 가고일의 모든 면은 다른 가고일의 면 하나를 보아야 한다.

즉, 가고일을 돌려서 각 가고일의 면마다 빛의 경로가 생기고, 그 경로가 다른 가고일의 면과 이어져야 한다. 자기 자신의 면과 이어져도 된다. 빛은 거울에서 반사될 수 있다.

무덤의 바닥 지도는 n×m 격자이다.

  • .은 빈 칸이다.
  • #은 장애물이다.
  • /와 \는 양면 거울이다.
  • V는 위와 아래를 향한 두 면을 가진 가고일이다.
  • H는 왼쪽과 오른쪽을 향한 두 면을 가진 가고일이다.

무덤은 \와 / 거울 외에도 거울 벽으로 둘러싸여 있다. 빛에 대해 다음을 가정한다.

  1. 빛은 빈 칸을 직선으로 지난다.
  2. 두 빛줄기는 서로 간섭하지 않고 교차할 수 있다.
  3. \ 거울은 위, 아래, 왼쪽, 오른쪽에서 오는 빛을 각각 오른쪽, 왼쪽, 아래, 위로 반사한다. / 거울은 위, 아래, 왼쪽, 오른쪽에서 오는 빛을 각각 왼쪽, 오른쪽, 위, 아래로 반사한다.
  4. 벽은 모두 거울이므로, 빛이 벽에 닿으면 180도 반사된다.
  5. 빛은 장애물과 가고일에 막힌다.

후는 임의의 가고일을 90도 회전시킬 수 있다. 시간이 부족한 후는 보물 문을 열기 위해 회전해야 하는 가고일의 최소 개수를 알고 싶어 한다.

입력

첫 줄에는 무덤의 크기를 나타내는 공백으로 구분된 두 정수 n과 m이 주어진다 (1≤n,m≤5001 \le n, m \le 500). 이어서 n줄에 걸쳐 길이가 m인 문자열 s가 한 줄씩 주어지며, 위에서 설명한 문자로 바닥 지도를 나타낸다. (∣s∣=m|s| = m)

출력

문을 열기 위해 회전해야 하는 가고일 개수의 최솟값을 한 정수로 출력한다. 퍼즐을 풀 수 없으면 −1-1을 출력한다.

힌트

위 그림은 첫 번째 입출력 예의 초기 상태(왼쪽)와 해(오른쪽)를 나타낸다. 가고일 3개를 회전하면 퍼즐이 풀린다.

예제3

  1. 예제 1

    입력
    5 5
    /.V.\
    ./.V.
    ..#..
    .V.#.
    \.V./
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2 5
    V...\
    H...V
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    2 2
    VV
    VV
    
    예상 출력
    0