쉬운 최단거리

하나의 목표 칸과 막힌 칸이 있는 격자에서 상하좌우 이동으로 각 열린 칸에서 목표까지의 최단 거리를 구한다.

쉬움3BFS그래프행렬아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

지도가 주어진다. 모든 칸에서 목표 지점까지의 최단 거리를 구하여라.

문제를 쉽게 만들기 위해 이동은 상하좌우 네 방향으로만 할 수 있다고 하자. 인접한 칸으로 한 번 움직이면 거리가 1 늘어나고, 갈 수 없는 땅은 지나갈 수 없다.

입력

첫째 줄에 지도의 크기 nnmm이 주어진다. nn은 세로 크기, mm은 가로 크기다. (2n10002 \le n \le 1000, 2m10002 \le m \le 1000)

다음 nn개 줄에 각각 mm개의 숫자가 공백으로 구분되어 주어진다. 0은 갈 수 없는 땅, 1은 갈 수 있는 땅, 2는 목표 지점이다. 2는 입력 전체에 정확히 한 개 있다.

출력

nn개 줄에 각각 mm개의 수를 공백으로 구분해 출력한다. rr번째 줄의 cc번째 수는 rrcc열 칸에서 목표 지점까지의 최단 거리다.

갈 수 없는 땅인 칸은 0을 출력한다. 갈 수 있는 땅이지만 목표 지점에 도달할 수 없는 칸은 -1을 출력한다. 목표 지점 자체는 0을 출력한다.