본문 바로가기

이코테

[15번] 특정거리의 도시 찾기

https://www.acmicpc.net/problem/18352

 

18352번: 특정 거리의 도시 찾기

첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개

www.acmicpc.net

 

특정거리의 도시찾기: 최단거리가 K인 모든 도시 찾기 (BFS)

 

  • 탐색방향: graph
  • 탐색조건: dist == -1
  • 탐색결과: 0 -> 1 -> 2 -> ... (최단거리 저장)
  • 출발점: S
  • 알고리즘 선택: 최단거리 K 까지 탐색 => BFS

 

import collections
import sys
input = sys.stdin.readline  # 간선갯수 100만개

N, M, K, S = map(int, input().split())
graph = [[] for _ in range(N + 1)]
for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)

# BFS
dist = [-1] * (N + 1)
dist[S] = 0
qu = collections.deque([S])
while qu:
    node = qu.popleft()
    if dist[node] == K:  # 최단거리 K 까지 탐색
        break

    for e in graph[node]:
        if dist[e] == -1:
            dist[e] = dist[node] + 1
            qu.append(e)

check = False
for i in range(1, N + 1):
    if dist[i] == K:
        print(i)
        check = True
if check == False:
    print(-1)

4 4 2 1
1 2
1 3
2 3
2 4

'이코테' 카테고리의 다른 글

[19번] 연산자 끼워 넣기  (0) 2021.05.04
[18번] 괄호 변환  (0) 2021.05.04
[17번] 경쟁적 전염  (0) 2021.05.03
[16번] 연구소  (0) 2021.05.03