알고리즘 - 다익스트라
자꾸 잊어서 작성..
하나의 정점에서 모든 정점까지 최소 비용 거리 구하기
ex) 가장 저렴하게 도로놓기, 최단 시간내에 목적지까지 가기 등
다익스트라 흐름
초기상태
0번 노드는 INF가 아니라 0으로 초기화 해도 됨
하나의 정점을 기준으로 설정
0번 노드를 기준
0번 노드를 기준으로 인접해서 갱신한 노드 기준으로
다시 인접 노드 가중치를 탐색
- 1번 노드를 다시 기준
1번 노드의 인접한 2번 노드까지 가중치를 계산해봄
1번 노드까지 오는데 가중치
2
+ 여기서 2번 노드까지 가중치1
=3
dist[2]에 저장된 값은6
이었으니, 갱신 필요
또한, 1번 노드의 인접한 3번 노드까지 가중치를 계산해봄
1번 노드까지 오는데 가중치
2
+ 여기서 3번 노드까지 가중치6
=8
dist[3]에 저장된 값은INF
이었으니, 갱신 필요
- 갱신이 발생한 2번 노드, 3번 노드를 기준으로 다시 동일하게 탐색반복
구현
int[] dist // 최단경로 거리 담고있는 배열
int[][] adj // 인접행렬 정보(단방향, 양방향에 따라 다름)
Queue q // 탐색해야하는 노드 번호 offer하는 큐
adj를 기반으로 1차원 dist 배열 초기화 // 탐색하고자 하는 노드는 0위치로 초기화, 나머지는 INF
q.offer(탐색하고자 하는 노드 번호)
while(!q.isEmpty()){
q.poll() //큐에서 노드번호 꺼내고
꺼낸 번호에서 인접한 노드들을 0~N-1 까지 반복문으로 탐색
만약
dist[i] = dist[i] < (dist[꺼낸 노드] + adj[꺼낸 노드][i]) ? dist[i] : (dist[꺼낸 노드] + adj[꺼낸 노드][i])
라면, dist[i] 갱신하고, queue 다음 탐색 노드 값으로 넣어줌
}
Author And Source
이 문제에 관하여(알고리즘 - 다익스트라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@upisdown/알고리즘-다익스트라저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)