해류

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

요약
각 칸에 해류 방향이 정해진 격자에서 해류를 따라가면 비용이 0, 다른 여덟 방향으로 움직이면 비용이 1일 때 시작점에서 도착점까지 필요한 최소 에너지를 구한다.
난이도

보통10점 중 7점

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

문제

넓은 수역 위의 배에게 강한 해류는 위험할 수 있지만, 신중히 계획하면 배가 목적지에 도달하도록 해류를 이용할 수도 있다. 당신이 할 일은 그 계획을 돕는 것이다.

각 위치에서 해류는 어떤 방향으로 흐른다. 선장은 해류의 흐름을 그대로 타고 에너지를 전혀 쓰지 않고 이동하거나, 그 외의 방향으로 한 칸 이동하는 데 에너지 1을 쓸 수 있다. 배는 항상 북, 남, 동, 서, 북동, 북서, 남동, 남서의 여덟 방향 중 하나로 움직인다. 배는 호수의 경계를 벗어날 수 없다. 최소 에너지로 목적지에 도달하는 전략을 세우도록 도와라.

입력

호수는 직사각형 격자로 표현된다. 입력의 첫째 줄에는 격자의 행의 수 rr 과 열의 수 cc 가 주어진다. 격자의 행과 열은 각각 최대 1000개이다. 이어지는 rr 개의 줄에는 각각 정확히 cc 개의 문자가 있으며, 각 문자는 00 부터 77 까지의 숫자이다. 문자 00 은 해류가 북쪽(격자에서 위쪽, 즉 행 번호가 감소하는 방향)으로 흐름을, 11 은 북동쪽, 22 는 동쪽(열 번호가 증가하는 방향), 33 은 남동쪽을 뜻하며, 아래와 같이 시계 방향으로 이어진다.

7 0 1
 \|/
6-*-2
 /|\
5 4 3

격자 다음 줄에는 이동의 횟수 nn 이 하나의 정수로 주어지며, nn 은 최대 50이다. 이어지는 nn 개의 줄에는 각 이동이 네 정수 rsr_s, csc_s, rdr_d, cdc_d 로 주어지는데, 이는 각각 출발점과 도착점의 행과 열이다. 행과 열의 번호는 11 부터 시작한다.

출력

각 이동마다, 출발점에서 도착점까지 가는 데 필요한 최소 에너지 양을 하나의 정수로 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    5 5
    04125
    03355
    64734
    72377
    02062
    3
    4 2 4 2
    4 5 1 4
    5 3 3 4
    
    예상 출력
    0
    2
    1