다익스트라 알고리즘은 그래프에서 한 정점부터 다른 모든 정점까지의 최단 경로를 찾는 알고리즘이다.
우리 일상생활에서 해당 알고리즘 사용 예시는 내비게이션 시스템, 네트워크 라우팅, 항공 노선 계획 등이있다


| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | Inf | Inf | Inf | Inf | Inf | Inf |
| 방문 | false | false | false | false | false | false |

| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | 0 | Inf | Inf | Inf | Inf | Inf |
| 방문 | true | false | false | false | false | false |

| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | 0 | 2 | 1 | Inf | Inf | Inf |
| 방문 | true | false | true | false | false | false |

| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | 0 | 2 | 1 | 3 | Inf | Inf |
| 방문 | true | true | true | false | false | false |

| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | 0 | 2 | 1 | 3 | 7 | 6 |
| 방문 | true | true | true | true | false | false |

| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | 0 | 2 | 1 | 3 | 7 | 6 |
| 방문 | true | true | true | true | false | true |

| 노드 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 거리 | 0 | 2 | 1 | 3 | 7 | 6 |
| 방문 | true | true | true | true | true | true |
function dijkstra(graph, start) {
const n = graph.length;
const distances = new Array(n).fill(Infinity);
const visited = new Array(n).fill(false);
distances[start] = 0;
for (let i = 0; i < n; i++) {
// 방문하지 않은 노드 중 가장 가까운 노드를 찾습니다
let minDistance = Infinity;
let minIndex = -1;
for (let j = 0; j < n; j++) {
if (!visited[j] && distances[j] < minDistance) {
minDistance = distances[j];
minIndex = j;
}
}
// 모든 노드를 방문했거나 연결되지 않은 노드만 남은 경우
if (minIndex === -1) break;
visited[minIndex] = true;
// 선택된 노드를 거쳐 다른 노드로 가는 거리를 계산합니다
for (let [neighbor, weight] of graph[minIndex]) {
const newDistance = distances[minIndex] + weight;
if (newDistance < distances[neighbor]) {
distances[neighbor] = newDistance;
}
}
}
return distances;
}
// 주어진 그래프
const graph = [
[[1, 5], [3, 1]],
[[0, 5], [2, 1], [4, 3]],
[[1, 1], [3, 2], [5, 2], [6, 8]],
[[0, 1], [2, 2], [5, 1]],
[[1, 3], [6, 1]],
[[2, 2], [3, 1], [6, 3]],
[[2, 8], [4, 1], [5, 3]],
];
// 시작 노드 (0번 노드에서 시작)
const startNode = 0;
// 알고리즘 실행
const shortestDistances = dijkstra(graph, startNode);
console.log(`노드 ${startNode}에서 각 노드까지의 최단 거리:`);
shortestDistances.forEach((distance, node) => {
console.log(`${startNode} → ${node}: ${distance}`);
});