파일 업로드

최단 경로 섬 찾기

profile
실행 시간 제한메모리 제한
1 초128 MB
📃 해결할 문제

과학자 영숙은 갑작스런 눈보라로 외딴 북극 섬에 고립되었고, 그녀의 고향으로 돌아갈 수 있는 모든 경로를 찾고 싶어합니다. 그녀는 보트를 테스트해보았고, 적절한 해류가 두 섬에 흐르는 경우, 한 섬에서 다른 섬으로 1단위의 시간 안에 이동할 수 있음을 알아냈습니다.

그녀는 N(1 <= N <= 100)개의 섬들 사이에 유효한 단방향 경로를 가진 바다 지도를 만들었습니다. 지도에서 각 섬은 1..N으로 번호가 매겨져있습니다. 경로는 해류가 그녀의 보트를 밀어주기 때문에 일방향(단방향)입니다. 두 섬 사이에 서로 다른 해류가 흐르는 경우, 양방향 경로를 가진 경우도 있습니다. 영숙은 지도에 한 섬과 그 섬 자신(즉, 동일한 섬) 사이에 경로를 표시하지 않기 위해 주의했습니다.

그녀의 출발 위치 M(1 <= M <= N)와 지도가 주어진 경우, 영숙에게 어느 섬이 한번 '이동'할 수 있는 거리에 떨어져 있고, 두 번 '이동' 할 수 있는 거리에 떨어져 있는지 등을 판단하는 것을 도와주세요. 영숙이 여러 다른 경로를 선택할 수 있는 경우, 섬에 도달할 수 있는 경우 가장 짧은 거리의 경로만을 고려하세요.

예를 들면, 아래는 N=4인 섬들의 연결 형태를 보여주고 있습니다 (이 예제에서 M=1):

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

영숙은 시간 0에서 섬 1을 방문할 수 있습니다 (M=1이기 때문에), 시간 1에 섬 2와 4를 방문할 수 있고, 시간 2에 섬 3을 방문할 수 있습니다.

이 작업의 입력은 행렬 C로서, 행 r, 열 c의 요소를 C_rc (0 <= C_rc <= 1)라고 하며, 그것이 1 값을 가진 경우 '해류는 영숙을 섬 r에서 섬 c로 직접 1시간단위로 이동시킬 수 있음'을 의미합니다. 행 C_r에는 N개의 요소가 있으며 각각은 0 또는 1입니다.

💻 입력
  • 첫 번째 줄 : 두 개의 공백으로 구분된 정수: N과 M
  • 두 번째 줄부터 N+1번째 줄 : i+1번째 줄은 N개의 공백으로 구분된 정수: C_r을 포함합니다.
🖨️ 출력
  • 첫 번째 줄부터 : i+1번째 줄에는 영숙이 시간 i에 방문할 수 있는 섬들의 목록(오름차순)을 표시합니다. 모든 도달 가능한 섬이 나열된 후에는 출력 줄을 포함하지 않습니다.

💻 예제 입력 1
4 1
0 1 0 1
0 0 1 0
0 0 0 1
0 0 0 0
🖨️ 예제 출력 1
1
2 4
3

출처: USACO 2011 March Bronze 2