길 찾기

면접 대비

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

요약
방향 그래프를 인접 행렬로 주고 시작 정점에서 너비 우선 탐색을 해 각 거리마다 처음 도달하는 정점을 출력한다.
난이도

보통10점 중 4점

유형
그래프, BFS
정답자
아직 제출이 없습니다

문제

베시(Bessie)가 외딴 북극 섬에 고립되었고, 자신의 목초지로 돌아갈 수 있는 모든 경로를 알아내려 합니다. 배를 시험해 본 결과, 두 섬을 잇는 적절한 해류 경로가 있으면 한 섬에서 다른 섬으로 1의 시간만에 이동할 수 있음을 알게 되었습니다.

베시는 바다를 11번부터 NN번까지 번호가 매겨진 NN개(1≤N≤1001 \le N \le 100)의 섬 사이를 잇는 한 번의 이동(single-hop) 경로들의 지도로 정리했습니다. 해류가 배를 한 방향으로만 밀기 때문에 모든 경로는 단방향입니다. 두 섬이 서로 반대 방향의 해류를 이용하는 두 개의 경로로 연결되어 사실상 양방향으로 오갈 수 있는 경우도 있습니다. 어떤 경로도 섬을 자기 자신과 연결하지는 않습니다.

시작 섬 MM(1≤M≤N1 \le M \le N)과 지도가 주어질 때, 어떤 섬들이 한 번 이동(hop)해서 닿는 곳인지, 두 번 이동해서 닿는 곳인지 등을 구하세요. 한 섬에 여러 경로로 닿을 수 있다면 가장 짧은 경로만 고려합니다.

예를 들어, 아래는 M=1M = 1일 때 N=4N = 4개의 섬이 연결된 모습입니다.

start--> 1-------->2
         |         |
         |         |
         V         V
         4<--------3

베시는 시간 0에 섬 1(출발지)에, 시간 1에 섬 2와 4에, 시간 2에 섬 3에 도달합니다.

지도는 행렬 CC로 주어집니다. rr행 cc열의 원소는 CrcC_{rc}(0≤Crc≤10 \le C_{rc} \le 1)이며, Crc=1C_{rc} = 1이면 해류를 이용해 섬 rr에서 섬 cc로 한 시간 단위 만에 곧바로 이동할 수 있음을 뜻합니다. 각 행 rr은 NN개의 원소 Cr1,…,CrNC_{r1}, \dots, C_{rN}을 가집니다.

입력

  • 첫째 줄: 두 정수 NN과 MM이 공백으로 구분되어 주어집니다.
  • 둘째 줄부터 N+1N+1째 줄까지: r+1r+1째 줄에는 행렬의 rr행에 해당하는 NN개의 정수 Cr1,…,CrNC_{r1}, \dots, C_{rN}이 공백으로 구분되어 주어집니다.

출력

  • 시간 i=0,1,2,…i = 0, 1, 2, \dots에 대해, 베시가 정확히 시간 ii에 처음 도달할 수 있는 모든 섬을 오름차순으로 한 줄에 출력합니다.
  • 그러한 섬이 존재하는 동안에만 줄을 출력하고, 다음 시간에 처음 도달하는 섬이 더 이상 없으면 멈춥니다. MM에서 도달할 수 없는 섬은 출력하지 않습니다.

예제3

  1. 예제 1

    입력
    4 1
    0 1 0 1
    0 0 1 0
    0 0 0 1
    0 0 0 0
    
    예상 출력
    1
    2 4
    3
    
  2. 예제 2

    입력
    1 1
    0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5 1
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    0 0 0 0 1
    0 0 0 0 0
    
    예상 출력
    1
    2
    3
    4
    5