728x90
https://www.acmicpc.net/problem/1753
문제
방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다.
코드
- 다익스트라 알고리즘 적용
import sys
import heapq
from collections import defaultdict
input = sys.stdin.readline
V, E = map(int, input().split())
src = int(input())
graph = defaultdict(list)
for _ in range(E):
u, v, w = map(int, input().split())
graph[u].append((w, v))
def dijkstra(src):
heap = [(0, src)]
min_dist = [float('inf')] * (V + 1)
visited = set()
min_dist[src] = 0
while heap:
cur_w, cur_v = heapq.heappop(heap)
if cur_v in visited:
continue
visited.add(cur_v)
min_dist[cur_v] = min(min_dist[cur_v], cur_w)
for nxt_w, nxt_v in graph[cur_v]:
if nxt_v not in visited:
w = nxt_w + cur_w
heapq.heappush(heap, (w, nxt_v))
return min_dist[1:]
for i in dijkstra(src):
if i == float('inf'):
print('INF')
else:
print(i)
728x90
'Algorithm & Data Structure > Baekjoon' 카테고리의 다른 글
[Baekjoon/python] 후위표기식 #1918 (0) | 2023.06.10 |
---|---|
[Baekjoon/python] 웜홀 #1865 (0) | 2023.06.09 |
[Baekjoon/python] 곱셈 #1629 (0) | 2023.06.07 |
[Baekjoon/python] 특정한 최단 경로 #1504 (0) | 2023.06.06 |
[Baekjoon/python] 파티 #1238 (0) | 2023.06.05 |