길 찾기
면접 대비시간 제한1초메모리 제한128 MB
방향 그래프를 인접 행렬로 주고 시작 정점에서 너비 우선 탐색을 해 각 거리마다 처음 도달하는 정점을 출력한다.
문제
베시(Bessie)가 외딴 북극 섬에 고립되었고, 자신의 목초지로 돌아갈 수 있는 모든 경로를 알아내려 합니다. 배를 시험해 본 결과, 두 섬을 잇는 적절한 해류 경로가 있으면 한 섬에서 다른 섬으로 1의 시간만에 이동할 수 있음을 알게 되었습니다.
베시는 바다를 번부터 번까지 번호가 매겨진 개()의 섬 사이를 잇는 한 번의 이동(single-hop) 경로들의 지도로 정리했습니다. 해류가 배를 한 방향으로만 밀기 때문에 모든 경로는 단방향입니다. 두 섬이 서로 반대 방향의 해류를 이용하는 두 개의 경로로 연결되어 사실상 양방향으로 오갈 수 있는 경우도 있습니다. 어떤 경로도 섬을 자기 자신과 연결하지는 않습니다.
시작 섬 ()과 지도가 주어질 때, 어떤 섬들이 한 번 이동(hop)해서 닿는 곳인지, 두 번 이동해서 닿는 곳인지 등을 구하세요. 한 섬에 여러 경로로 닿을 수 있다면 가장 짧은 경로만 고려합니다.
예를 들어, 아래는 일 때 개의 섬이 연결된 모습입니다.
start--> 1-------->2
| |
| |
V V
4<--------3
베시는 시간 0에 섬 1(출발지)에, 시간 1에 섬 2와 4에, 시간 2에 섬 3에 도달합니다.
지도는 행렬 로 주어집니다. 행 열의 원소는 ()이며, 이면 해류를 이용해 섬 에서 섬 로 한 시간 단위 만에 곧바로 이동할 수 있음을 뜻합니다. 각 행 은 개의 원소 을 가집니다.
입력
- 첫째 줄: 두 정수 과 이 공백으로 구분되어 주어집니다.
- 둘째 줄부터 째 줄까지: 째 줄에는 행렬의 행에 해당하는 개의 정수 이 공백으로 구분되어 주어집니다.
출력
- 시간 에 대해, 베시가 정확히 시간 에 처음 도달할 수 있는 모든 섬을 오름차순으로 한 줄에 출력합니다.
- 그러한 섬이 존재하는 동안에만 줄을 출력하고, 다음 시간에 처음 도달하는 섬이 더 이상 없으면 멈춥니다. 에서 도달할 수 없는 섬은 출력하지 않습니다.