## 코드
사전에 [[힙 (heap)|Heap]] 클래스를 구현해둬야 한다. (최소 힙 활용)
```javascript
// start: 경로를 계산할 시작 지점.
// 시작 지점부터 다른 전체 노드까지의 각 최단 경로를 반환한다.
function dijkstra(start) {
// 0) 초기 설정
const dist = new Array(n + 1).fill(Infinity);
dist[start] = 0;
const minHeap = new Heap(([c1, v1], [c2, v2]) => c1 < c2);
minHeap.push([0, start]);
// 1) minHeap이 빌 때까지 반복한다.
while (minHeap.size() > 0) {
const [cost, u] = minHeap.pop();
// NOTE : dist 정보와 cost 정보가 다르다면 구버전 정보이므로 넘어간다. (이미 처리한 노드임을 의미)
if (cost !== dist[u]) continue;
// 2) u의 간선들을 모두 탐색한다.
for (const [v, w] of adj[u]) {
// 3) v로 가는데 걸리는 비용의 최솟값을 업데이트한다.
const nextCost = cost + w;
if (nextCost < dist[v]) {
dist[v] = nextCost;
minHeap.push([nextCost, v]);
}
}
}
return dist;
}
```