문제풀이/백준(Boj) 문제풀이
[백준][BFS] 1753. 최단경로 (파이썬/Python)
얄루몬
2021. 11. 9. 15:51
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
import heapq
n, m = map(int, input().split())
start = int(input())
INF = int(1e9)
graph = [[] * (n+1) for _ in range(n+1)]
distance = [INF] * (n+1)
for _ in range(m):
u, v, w = map(int, input().split())
# u에서 v로 가는 거리가 w라는 의미
graph[u].append((v, w))
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 + i[1]
# 현재 노드를 거쳐서, 다른 노드로 이동하는 거리가 더 짧은 경우
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
dijkstra(start)
for i in range(1, n+1):
if distance[i] == INF:
print("INF")
else:
print(distance[i])
다익스트라 알고리즘을 사용해서 풀면 된다.