## 코드 사전에 [[힙 (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; } ```