이호진
다익스트라 알고리즘 - 2021/03/22 본문
다익스트라 알고리즘은 최단 경로 알고리즘 중 하나이다.
최단 경로 알고리즘에서 '음의 간선'이 없을 때 제대로 동작한다.
다익스트라 알고리즘의 원리는
1. 출발 노드를 설정한다.
2. 최단 거리 테이블을 초기화한다.
3. 방문하지 않은 노드 중에서 최단거리가 가장 짧은 노드를 선택한다.
4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다.
5. 3과 4의 과정을 반복한다.
다익스트라 알고리즘은 최단 경로를 구하는 과정에서 각 노드에 대한 현재까지의 최단 거리 정보를 항상 1차원 리스트에 저장하며 리스트를 계속 갱신한다는 특징이 있다.
import sys
input = sys.stdin.readline
INF=int(1e9)
n,m=map(int,input().split())
start=int(input())
graph=[[]for i in range(n+1)]
visited=[False]*(n+1)
distance=[INF]*(n+1)
for i in range(m):
a,b,c = map(int,input().split())
graph[a].append((b,c))
def get_smallest_node():
min_value = INF
index=0
for i in range(1,n+1):
if distance[i]<min_value and not visited[i]:
min_value = distance[i]
index=i
return index
def dijkstra(start):
distance[start]=0
visited[start] = True
for j in graph[start]:
distance[j[0]]=j[1]
for i in range(n-1):
now=get_smallest_node()
visited[now]=True
for j in graph[now]:
cost=distance[now]+j[1]
if cost<distance[j[0]]:
distance[j[0]]=cost
dijkstra(start)
for i in range(1,n+1):
if distance[i]==INF:
print("INFINITY")
else:
print(distance[i])
'주요 알고리즘' 카테고리의 다른 글
최단 경로 알고리즘 - 플로이드-워셜 - 2021/04/03 (0) | 2021.04.03 |
---|---|
최단 경로 알고리즘 - 다익스트라 - 2021/04/02 (0) | 2021.04.02 |
크루스칼 알고리즘 - 2021/03/16 (0) | 2021.03.16 |
음료수 얼려먹기 - DFS (2021/02/22) (0) | 2021.02.22 |
탐색 알고리즘 BFS (2021/02/21) (0) | 2021.02.21 |