이숭간 공부기록
백준 1753번 파이썬 _ 최단경로 (골드5) 본문
728x90
- 문제유형 : 다익스트라
- 문제풀이 : 다익스트라 알고리즘 구현
- 단 노드의 개수가 10000개이상이므로 힙 자료구조를 써서 우선순위큐로 구현해야한다.
- 정답코드
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
v, e = map(int, input().split())
start = int(input())
graph = [[] for _ in range(v+1)]
visited = [False] * (v+1)
distance = [INF] * (v+1)
for i in range(e):
a,b,c = map(int, input().split())
graph[a].append((b,c))
def dijkstra(start):
q = []
distance[start] = 0
heapq.heappush(q, (0, start))
while q: #힙이 빌때까지
dist, now = heapq.heappop(q)
if visited[now] == True: #이미 방문한적이 있는 노드라면 무시한다.
continue
for i in graph[now]:
cost = dist + i[1] # 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, v+1):
if distance[i] == INF:
print('INF')
else:
print(distance[i])
'알고리즘 > 백준' 카테고리의 다른 글
백준 7576번 파이썬 _ 토마토 (실버1) (0) | 2021.03.24 |
---|---|
백준 7662번 파이썬 _ 이중 우선순위 큐 (0) | 2021.03.22 |
[백준] 1541번 파이썬 _ 잃어버린 괄호 (0) | 2021.03.17 |
백준 1697번 파이썬 _ 숨바꼭질 (실버1) (0) | 2021.03.15 |
백준 5397번 파이썬 _ 키로거 (실버3) (0) | 2021.03.14 |