반응형
문제
https://www.acmicpc.net/problem/1753
소스코드
import sys
import heapq
input = sys.stdin.readline
V, E = map(int, input().split())
k = int(input())
grape = {}
for i in range(E):
u, v, w = map(int, input().split())
if u not in grape:
grape[u] = []
grape[u].append((v, w))
def dijkstra(start):
q = []
distance_list =[1e9 for i in range(V + 1)]
heapq.heappush(q, (0, start))
distance_list[start] = 0
while q:
current_distance, current_node = heapq.heappop(q)
if current_distance > distance_list[current_node]:
continue
if current_node in grape:
for neighbor, weight in grape[current_node]:
distance = current_distance + weight
if distance < distance_list[neighbor]:
distance_list[neighbor] = distance
heapq.heappush(q, (distance, neighbor))
return distance_list
datalist = dijkstra(k)
for i in range(V):
temp = datalist[i + 1]
if temp == 1e9:
print("INF")
else:
print(temp)
다익스트라 풀이입니다.
음수 가중치가 없는 그래프에서 사용할 수 있는 최단경로 알고리즘입니다.
시간복잡도는 우선순위큐를 사용하였다면 O(ElogV)입니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준/Python] 1516번 게임 개발 - (위상정렬) (1) | 2024.11.22 |
---|---|
[백준/Python] 11657번 타임머신 - (벨만 포드) (0) | 2024.11.21 |
[백준/Python] 1275번 커피숍 2 (0) | 2024.11.19 |
[백준/Python] 2357번 최솟값과 최댓값 (0) | 2024.11.17 |
[백준/Python] 11505번 구간 곱 구하기 (0) | 2024.11.16 |
댓글