문제 출처 : https://www.acmicpc.net/problem/18352
내 풀이
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
n, m, k, x = map(int, input().split())
graph = [[] for i in range(n + 1)]
distance = [INF] * (n + 1)
check = -1
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
def dijkstra(start):
q = []
heapq.heappush(q, (0, start))
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + 1
if cost < distance[i]:
distance[i] = cost
heapq.heappush(q, (cost, i))
dijkstra(x)
for i in range(1, n + 1):
if distance[i] == k:
print(i)
check = 1
if check == -1:
print(check)
설명
다익스트라 최단 거리 문제이다.
반복문을 돌면서 위치값과 거리를 갱신해가며 지정한 시작점에서부터 갈 수 있는 모든 경로에 최단 거리를 집어넣는다.
'코딩테스트' 카테고리의 다른 글
[백준][파이썬]2805번: 나무 자르기 (0) | 2021.06.01 |
---|---|
[백준][파이썬]1620번: 나는야 포켓몬 마스터 이다솜 (2) | 2021.06.01 |
[백준][파이썬]11727번: 2 x n 타일링 2 (0) | 2021.05.13 |
[백준][파이썬]14501번: 퇴사 (0) | 2021.05.13 |
[백준][파이썬]9625번: BABBA (0) | 2021.05.13 |