티스토리 뷰

알고리즘

Dijkstra(다익스트라)

geonwoopaeng@gmail.com 2020. 8. 27. 21:31

Dijkstra(다익스트라)

- 하나의 노드에서 다른 모든 노드까지의 최단경로를 구하는 알고리즘

- 간선들의 가중치를 기억해서 해당 노드까지의 경로가 최소로 갱신하는 알고리즘

 

import heapq

ex_visit = [0 for _ in range(n+1)] #전의 값을 저장하는 곳
visit = [[''] for _ in range(n+1)] #전체 경로 나타내는 곳

def djikstra(start):
	global ex_visit, visit 
    
    wei = [1000000] * (n+1)  #최단거리
    heap = [] 

    heapq.heappush(heap,(0, start)) #(거리, node)
    wei[s] = 0 
    
    while heap:
    
        weight, node = heapq.heappop(heap)
        
        for we, no in graph[node]:
        
            if wei[no] > weight + we:
                wei[no] = weight + we
                heapq.heappush(heap,(weight+we,no))
                
                ex_visit[no] = node  #역추적하기 위해 전 node를 저장한다.
                visit[no] = visit[node] + ',' + str(no) 
                
                
    return wei
    
    
    

 

 

<추가자료>

Minsuk Heo 허민석 유튜브 https://www.youtube.com/watch?v=HFapeLxvdNg

반응형

'알고리즘' 카테고리의 다른 글

소수  (0) 2020.08.27
최소공배수 (LCM)  (0) 2020.08.27
유클리드 호제법(최대 공약수 구하기)  (0) 2020.08.27
플로이드-워셜(Floyd-Warshall)  (0) 2020.08.26
하노이의 탑  (0) 2020.08.26
공지사항
최근에 올라온 글