본섬 일주 항로

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

요약
A 칸으로 이루어진 본섬을 둘러싸되 x 칸은 둘러싸지 않는 가장 짧은 닫힌 경로의 길이를 구한다. 경로는 같은 칸을 여러 번 지나도 된다.
난이도

어려움10점 중 8점

유형
BFS, 최단 경로, 그래프, 구현
정답자
아직 제출이 없습니다

문제

농부 John이 자신만의 크루즈 항로 사업을 시작하기로 했습니다! 지금은 배가 한 척뿐이지만, 큰 성장을 꿈꾸고 있습니다. 그는 최근에 배가 운항할 바다 구역의 지도를 얻었습니다. 지도는 아래 그림과 같으며, 높이는 HH (3≤H≤10003 \le H \le 1000), 너비는 WW (3≤W≤10003 \le W \le 1000) 입니다.

       ...................
       ...................
       .....A.............
       .....A..x..........
       ..x..A.....AAAA....
       .....A.....A..A....
       .....AAAAAAAA.A....
       ........A.....A....
       .xx...AAA...x.A....
       ......A............
       ...AAAAAAAAAAAAA...
       ...................

이 지도에서 . 는 바다, A 는 본섬을 이루는 칸, x 는 다른 섬에 속하는 칸을 나타냅니다.

John은 배가 본섬을 한 바퀴 완전히 돌도록 항로를 정하려고 합니다. 그런데 무역 제한 때문에, 배의 항로는 다른 어떤 섬도 둘러싸서는 안 됩니다. 예를 들어 아래의 길이 50짜리 항로는 x 로 표시된 섬을 둘러싸므로 허용되지 않습니다.

       ...................
       ....+--+...........
       ....|A.|...........
       ....|A.|x.+-----+..
       ..x.|A.+--+AAAA.|..
       ....|A.....A..A.|..
       ....|AAAAAAAA.A.|..
       ....|...A.....A.|..
       .xx.|.AAA...x.A.|..    <--- route circumnavigates 'x' -- illegal!
       ..+-+.A.........|..
       ..|AAAAAAAAAAAAA|..
       ..+-------------+..

지도가 주어질 때, 배가 다른 어떤 섬도 둘러싸지 않으면서 본섬을 한 바퀴 도는 가장 짧은 항로의 길이를 구하세요.

두 칸은 상하좌우로 바로 맞닿아 있을 때에만 인접한 것으로 봅니다(대각선은 인접하지 않습니다). 본섬은 항상 하나로 연결되어 있으며, 조건을 만족하는 항로가 반드시 존재함이 보장됩니다.

항로는 같은 칸을 두 번 이상 지날 수 있습니다. 예를 들어 위 지도의 최적 항로는 길이가 62이며, 세 칸을 다시 지납니다.

       ...................
       ....+--+...........
       ....|A.|...........
       ....|A.|x.+----+...
       ..x.|A.+--+AAAA|...
       ....|A.....A..A|...
       ....|AAAAAAAA.A|...
       ....|...A..+-+A|...
       .xx.|.AAA..|x|A|...
       ..+-+.A....+-+-++..
       ..|AAAAAAAAAAAAA|..
       ..+-------------+..

항로가 스스로 겹쳐서 위 그림은 알아보기 어렵습니다. 그래서 아래에 두 단계로 나누어 다시 그렸습니다.

       ...................            ...................
       ...................            ....+--+...........
       .....A.............            ....|A.|...........
       .....A..x..........            ....|A.|x.+----+...
       ..x..A.....AAAA....            ..x.|A.+--+AAAA|...
       .....A.....A..A....  and then  ....|A.....A..A|...
       .....AAAAAAAA.A....            ....|AAAAAAAA.A|...
       ....V...A..+>.A....            ....V...A...>+A|...
       .xx.|.AAA..|x.A....            .xx...AAA...x|A|...
       ..+-+.A....+----+..            .....A.......+-+...
       ..|AAAAAAAAAAAAA|..            ...AAAAAAAAAAAAA...
       ..+-------------+..            ...................

입력

  • 1번째 줄: 공백으로 구분된 두 정수 HH 와 WW.
  • 2번째 줄부터 H+1H+1번째 줄까지: i+1i+1번째 줄에는 지도의 ii번째 행을 나타내는 WW개의 문자가 주어집니다(각 문자는 ., x, A 중 하나).

출력

  • 1번째 줄: 배가 택할 수 있는 항로의 최소 길이.

예제3

  1. 예제 1

    입력
    12 19
    ...................
    ...................
    .....A.............
    .....A..x..........
    ..x..A.....AAAA....
    .....A.....A..A....
    .....AAAAAAAA.A....
    ........A.....A....
    .xx...AAA...x.A....
    ......A............
    ...AAAAAAAAAAAAA...
    ...................
    
    예상 출력
    62
    
  2. 예제 2

    입력
    3 3
    ...
    .A.
    ...
    
    예상 출력
    8
    
  3. 예제 3

    입력
    5 8
    ........
    .AAAAAA.
    .A....A.
    .A.xx.A.
    ........
    
    예상 출력
    26