80장. 다익스트라 알고리즘
Before we go, 다익스트라란?
Dijkstra, 다익스트라 알고리즘은 도로 교통망 같은 곳에서 나타날 수 있는 그래프에서 꼭짓점 간의 최단경로를 찾는 알고리즘이다.
다이나믹 프로그래밍을 이용해 최단 경로를 찾는 알고리즘으로, 하나의 최단 거리를 구할 때 그 이전에 구했던 최단 거리 정보를 그대로 사용한다.
원리
특정한 하나의 정점을 잡고, 그 정점과 이웃한 정점들의 비용을 각각 확인한다.
그 후, 이웃한 정점들 중 가장 비용이 적게 드는 정점을 기준으로 다시 한번 확인한다.
이걸 반복하면서 현재까지 알고있던 최단 경로를 계속 갱신해나간다.
즉, 다음과 같은 과정을 거친다.
- 출발 노드 설정
- 출발 노드를 기준으로 각 노드의 최소 비용 저장
- 방문하지 않은 노드 중에서 가장 비용이 적게 드는 노드 선택
- 해당 노드를 거쳐 특정한 노드로 가는 경우를 고려하여 최소 비용 갱신
- 3번 4번 과정 반족
구현
구현할 때는 이차원 배열을 이용한다. 각 배열의 값은 특정 행에서 특정 열로 가는 비용이다.
1 |
|
우선순위 큐(heap)을 사용하면 시간을 훨씬 줄일 수 있다.
1 |
|