728x90
https://www.acmicpc.net/problem/18352
import sys; input = sys.stdin.readline
from collections import deque
N, M, K, X = map(int, input().split())
linked_list = [list() for _ in range(N + 1)]
for i in range(M):
s, e = map(int, input().split())
linked_list[s].append(e)
visit = [K + 1 for _ in range(N + 1)]
visit[X] = 0
q = deque()
q.append(X)
while q:
cur = q.popleft()
for adj in linked_list[cur]:
if visit[adj] != K and visit[adj] > visit[cur] + 1:
visit[adj] = visit[cur] + 1
q.append(adj)
ans = ''
for i in range(N + 1):
if visit[i] == K:
ans += str(i)+'\n'
print(ans if ans else -1)
연결리스트로 단방향 그래프를 작성하였고 다익스트라를 사용하였다.
visit으로 방문 하지 않은 노드 중에 갱신될만한 곳을 찾아서 큐에 넣었고 끝날때까지 반복한다.
반복문이 끝난 이후 특정 거리의 도시번호를 추가하고 없는 경우엔 -1을 출력하였다.
오랜만에 실버 문제여서 쉽게 풀었다.
'STUDY > Algorithm' 카테고리의 다른 글
[SWEA] 2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2021.07.29 |
---|---|
[백준] 1912 연속합, python, C (0) | 2021.07.27 |
[백준] 16236 아기 상어, python (0) | 2021.07.22 |
[백준] 20057 마법사 상어와 토네이도 python (0) | 2021.07.20 |
[프로그래머스] 캐시, 2018 KAKAO BLIND RECRUITMENT[1차], python (0) | 2021.07.19 |