티스토리 뷰

728x90

다익스트라 알고리즘 (Dijkstra Algorithm)

개념

- 특정한 한 정점(=노드)에서 출발하여 다른 모든 정점으로 가는 최단 경로를 구하는 알고리즘

- BFS와 DP를 활용한 최단경로 탐색 알고리즘

- DP를 활용하는 이유는 최단 거리를 구할 때 그 이전까지 구했던 최단 거리 정보를 그대로 활용하기 때문

- 그래프의 간선마다 가중치가 존재할 때 사용 (음의 가중치는 존재하지 않음)

 

구현

- 최단 거리 테이블 MAX 값으로 초기화 (최단 거리를 저장해야 하므로 큰 수로 초기화 시킴)

- 출발 노드 설정

- 방문하지 않은 노드 중에서 최단 거리(가중치)가 가장 짧은 노드 선택

- 해당 노드를 거쳐 다른 노드로 이동하는 비용을 계산하여 최단 거리 테이블 갱신

- 계속해서 가중치가 가장 짧은 노드를 선택하면서 최단 거리 테이블 갱신

- 현재 노드로의 최단거리가 현재 가중치보다 작다면 update할 이유가 없으므로 continue ⭐️ (이 한 줄로 심화문제 풀 때, 시간초과 해결 가능..)

if(min[now.end] < now.weight) continue;

- 매번 최단 거리 테이블을 모든 원소를 탐색하는 방법이 있지만, 우선순위 큐를 사용하면 단순 탐색보다 시간 복잡도를 줄일 수 있음

 

코드

가장 기본적인 다익스트라 코드로 해결할 수 있는 백준 1753번 문제이다.

 

1753번: 최단경로

첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가

www.acmicpc.net

이 문제에 대한 풀이는 아래 포스팅한 글에 자세히 작성해두었다.

 

[백준] 1753번 최단경로 (JAVA)

문제 - 방향 그래프가 주어짐 - 시작점에서 다른 모든 정점으로의 최단 경로 구하기 - 다익스트라 기본 유형 해결방법 다익스트라 알고리즘을 사용하는 기본적인 유형으로 가중치가 있는 그래프

sa11k.tistory.com

 

728x90

'Algorithm > Algorithm' 카테고리의 다른 글

[알고리즘] 부분집합(Subset)  (0) 2022.07.01
[알고리즘] 조합(Combination)  (0) 2022.07.01
[알고리즘] 순열(Permutation)  (0) 2022.07.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday