가구가 배치된 방에 청소기 로봇이 있다. 방은 세로 칸, 가로 칸인 차원 격자칸으로 표현한다. 각 칸은 로봇이 갈 수 있는 칸과 가구가 배치되어 갈 수 없는 칸들로 구별된다고 한다. 격자의 가장 바깥쪽 한 줄은 모두 갈 수 없는 칸들이라고 가정한다. 또, 갈 수 없는 칸들이 상하좌우로 인접한 것은 연결된 것이라고 했을 때, 모든 갈 수 없는 칸들은 연결되어 있다.
개의 쿼리가 주어진다. 각 쿼리는 격자칸의 위치 두 개이다. 각 위치는 의 좌표로 주어진다. 행 번호는 위에서부터 로 시작하여 까지, 열 번호는 왼쪽에서부터 로 시작하여 까지 번호가 매겨진다. 각 쿼리에 대한 대답은 주어진 위치들을 연결하는 가장 짧은 길의 길이이다. 로봇은 상하좌우로 인접한 칸으로만 움직일 수 있다. 길의 길이는 로봇이 인접한 칸으로 이동한 횟수로 표현한다.
주어진 가구 배치에 대해서 쿼리들에 대한 대답을 계산하는 프로그램을 작성하시오.
첫째 줄에 그려지는 세로 칸 수 , 가로 칸 수 , 쿼리의 개수 가 공백으로 구분되어 주어진다. (, )
다음 개의 줄에는 방의 배치를 나타내는 개의 글자가 각각 주어진다. 각 글자는 .
인 경우 로봇이 갈 수 있는 칸, #
인 경우 로봇이 갈 수 없는 칸이다.
다음 개의 줄에 쿼리가 하나씩 주어진다. 각 쿼리는 , , , 네 개의 정수가 공백으로 구분되어 주어진다. 이는 쿼리의 두 위치의 좌표가 와 임을 의미한다. 또한 좌표는 로봇이 갈 수 있는 칸들에 대해서만 주어진다.
각 쿼리에 대해서 한 줄에 정수를 하나 출력한다. 두 위치 간을 이동하는 것이 가능한 경우 가장 짧은 길의 길이를 출력한다. 이동이 불가능한 경우 -1
을 출력한다.
6 6 2 ###### #....# #.##.# #.#.## #.#.## ###### 5 2 3 5 5 2 5 4
7 -1
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 19점
종류 2: 21점
종류 3: 26점
(홀수)이다. 좌표 , , …, 는 모두 로봇이 갈수 있는 칸이다. 이 좌표들을 중심축이라고 하자. 중심축이 아닌 다른 좌표가 로봇이 갈수 있는 칸이라면, 그 칸에서 중심축 방향으로 가로로 이동해서 중심축에 도달할 때 까지 거치는 모든 칸들은 로봇이 갈 수 있는 칸들이다. 아래 예를 참고하라.
###########
####..#####
##.......##
###.....###
#####.....#
#####.#####
#.....#####
#####.....#
#####.#####
##.....####
###......##
###########
종류 4: 34점
별다른 제약조건 없음.