브론즈: 연잎 연못
시간 제한1초메모리 제한128 MB
격자에서 시작 lilypad부터 도착 lilypad까지 일반화된 나이트 이동을 몇 번 해야 하는지 최소 횟수를 구한다. 착지 칸만 lilypad이면 된다.
문제
농부 존은 소들이 감상하고 운동할 수 있도록 직사각형 연못을 만들었다. 연못은 개의 행과 개의 열로 이루어진 격자로 나뉘어 있다 (, ). 각 칸에는 세 가지 중 하나가 있다: 매우 튼튼한 연잎, 바위, 또는 그냥 물.
젖소 베시는 연잎에서 연잎으로 뛰어다니며 발레를 연습하고 있다. 지금 하나의 연잎 위에 서 있으며 다른 연잎으로 이동하려고 한다. 베시는 연잎에만 착지할 수 있고, 물이나 바위에는 착지할 수 없다.
베시의 각 도약은 일반화된 나이트(체스 말)의 이동 모양을 한다. 즉, 상하좌우 중 한 방향으로 칸 이동한 뒤 그와 수직인 방향으로 칸 이동하거나, 칸 이동한 뒤 수직인 방향으로 칸 이동한다 (, , ). 따라서 한 번의 도약에서 최대 여덟 개의 착지 후보 칸이 생긴다. 착지하는 칸만 연잎이면 되고, 도약 도중 지나가는 물이나 바위는 상관없다.
연못의 배치와 두 도약 길이가 주어질 때, 베시가 시작 연잎에서 도착 연잎까지 이동하는 데 필요한 최소 도약 횟수를 구하여라. 모든 입력에 대해 이동이 가능함이 보장된다.
입력
첫째 줄에 네 정수 , , , 가 공백으로 구분되어 주어진다.
다음 개의 줄에는 각각 연못의 한 행을 나타내는 개의 정수가 공백으로 구분되어 주어지며, 각 값의 의미는 다음과 같다.
- — 물
- — 연잎
- — 바위
- — 베시가 출발하는 연잎
- — 베시의 도착 연잎
값이 인 칸과 값이 인 칸은 각각 정확히 하나씩 존재한다.
출력
베시가 시작 연잎에서 도착 연잎까지 이동하는 데 필요한 최소 도약 횟수를 정수 하나로 출력한다.
힌트
각 연잎을 그래프의 정점으로 생각하고, 두 연잎이 한 번의 일반화된 나이트 이동으로 이어질 때 간선을 잇는다. 그러면 시작 연잎에서의 너비 우선 탐색(BFS)으로 최소 도약 횟수를 구할 수 있다. 베시는 물이나 바위 위를 지나갈 수 있으며, 착지하는 칸만 연잎이면 된다는 점에 유의한다.