sugang
sugang'study
sugang
전체 방문자
오늘
어제
  • 분류 전체보기
    • [OS]
    • [취업정보]
    • [Server]
    • [Algorithm]
    • [Database]
    • [MyTravel]
    • [Network]

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • n

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sugang

sugang'study

[이코테] 다익스트라 알고리즘
[Algorithm]

[이코테] 다익스트라 알고리즘

2022. 6. 2. 14:41

특정 노드에서 다른 노드로 가는 최단 경로를 알려주는 알고리즘

 

음의 간선이 없을 때 사용 

 

단계마다 최단 거리를 가지는 노드를 하나씩 반복적으로 선택한다. 그리고 해당 노드를 거쳐 가는 경로를 확인하며, 최단 거리 테이블을 갱신하는 방식으로 동작한다.

 

우선순위 큐 라이브러리는 (가치,물건)으로 구성된다면, 첫 번째 원소(가치)를 기준으로 우선순위를 설정한다. 

# 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우
#노드와 간선의 개수가 많을 경우 유리 
#우선순위 큐 라이브러리 > 최소 힙 구조 사용- 값이 낮은 데이터를 먼저 삭제
#튜플 데이터를 (거리,노드)로 큐에 삽입 
import heapq
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)]
distance = [INF] * (n+1)

# 모든 간선 정보 입력
for _ in range(m):
    a,b,c = map(int,input().split())
    # a번 노드에서 b번 노드로 가는 비용이 c
    graph[a].append(b,c)

def dijkstra (start):
    q=[]
    heapq.heappush(q,(0,start)) 
    distance[start] = 0
    while q: #큐가 비어있지 않다면
        dist,now = heapq.heappop(q) #가장 최단 거리가 짧은 노드에 대한 정보 꺼내기
        # 처리된 적 있는 노드라면 무시
        if distance[now] < dist :
            continue
        #현재 노드와 인접한 다른 노드들 확인 
        for i in graph[now]:
            cost = dist +i[1] #i[1] => c
            #현재 노드를 거쳐 다른 노드로 이동하는 거리가 더 짧은 경우 
            if cost < distance[i[0]]:
                distance [i[0]] = cost
                heapq.heappush(q,(cost,i[0])) #(가치,노드)순으로 삽입

dijkstra(start)

#모든 노드로 가기 위한 최단 거리를 출력  
for i in range(1,n+1):
    if distance[i] == INF:
        print('infinity')
    else:
        print (distance[i])

1에서 갈 수 있는 2,3,4 거리 업데이트

그 중 최단거리인 4번 노드 선택 

4번 노드에서 갈 수 있는 3,5 노드의 거리 업데이트 

최단거리 5번 노드 선택 

 

전 과정을 큐가 빌 때 까지 반복!

'[Algorithm]' 카테고리의 다른 글

완전탐색 - 최대최소차  (0) 2023.05.08
완전탐색 - 여러 구간, 구간 합의 최댓값이 최소가 되도록  (0) 2023.05.08
[백준] - 2839 설탕배달  (0) 2022.05.27
[백준] 9251-LCS  (0) 2022.05.25
백준 11792- [재귀함수] 하노이 탑 이동순서  (0) 2021.09.28
    '[Algorithm]' 카테고리의 다른 글
    • 완전탐색 - 최대최소차
    • 완전탐색 - 여러 구간, 구간 합의 최댓값이 최소가 되도록
    • [백준] - 2839 설탕배달
    • [백준] 9251-LCS
    sugang
    sugang

    티스토리툴바