다익스트라 최단경로 계산기
간선 목록에서 시작점부터 모든 정점까지의 최단거리와 경로를 구하고, 정점이 확정되는 순서를 한 단계씩 보여 줍니다. 음수 가중치가 있으면 답을 믿을 수 없다고 알려 줍니다.
한 줄에 «출발 도착 가중치» 하나씩. 화살표(A→B 5)와 쉼표도 받습니다
정점 6개 · 간선 7개
6개 정점에 닿음
A에서 모든 정점에 닿습니다
정점별 최단거리
| 정점 | 거리 | 경로 |
|---|---|---|
| A | 0 | A |
| B | 4 | A → B |
| C | 2 | A → C |
| D | 9 | A → C → E → D |
| E | 5 | A → C → E |
| F | 20 | A → C → E → D → F |
확정되는 순서
| # | 확정 | 거리 | 줄어든 이웃 |
|---|---|---|---|
| 1 | A | 0 | B ∞→4, C ∞→2 |
| 2 | C | 2 | E ∞→5 |
| 3 | B | 4 | D ∞→14 |
| 4 | E | 5 | D 14→9 |
| 5 | D | 9 | F ∞→20 |
| 6 | F | 20 | — |
확정 거리가 줄지 않고 커지기만 하는 것이 다익스트라의 성질입니다. 가중치가 음수가 아니면 «지금 가장 가까운 것»보다 더 짧아질 길이 뒤에 나타날 수 없기 때문입니다.
사용 방법
- 1간선을 한 줄에 «출발 도착 가중치» 하나씩 넣습니다.
- 2시작 정점을 정하고 간선에 방향이 있는지 고릅니다.
- 3정점별 최단거리와 경로를 확인하고, 확정 순서 표에서 거리가 어떻게 줄어드는지 따라갑니다.
자주 묻는 질문
아직 확정하지 않은 정점 가운데 시작점에서 가장 가까운 것을 하나 골라 확정하고, 그 정점을 거쳐 가면 더 가까워지는 이웃의 거리를 줄이는 일(완화)을 되풀이합니다. 한 번 확정한 정점은 다시 보지 않는데, 가중치가 음수가 아니면 그 거리가 더 줄어들 여지가 없기 때문입니다.
«한 번 확정한 거리는 더 줄지 않는다»는 전제가 깨지기 때문입니다. 먼 정점을 거쳐 가는 길이 음수 간선을 만나 더 짧아질 수 있는데, 이미 확정한 정점은 다시 보지 않으므로 그 길을 놓칩니다. 순서에 따라 우연히 맞기도 하지만 맞았는지 아닌지를 다익스트라만으로는 알 수 없어, 이 도구는 값을 내되 경고를 함께 띄웁니다.
벨만-포드 알고리즘을 씁니다. 모든 간선을 정점 수만큼 훑어 거리를 줄이는 방식이라 느리지만 음수 간선이 있어도 정확합니다. 다만 음수 순환(돌 때마다 총 길이가 짧아지는 고리)이 있으면 최단경로 자체가 정의되지 않으며, 벨만-포드는 그런 순환이 있다는 것을 알려 줄 수 있습니다.
시작 정점에서 갈 길이 아예 없는 정점입니다. 간선에 방향이 있으면 한쪽으로만 갈 수 있어 이런 정점이 자주 생깁니다. 간선 방향을 «없음»으로 바꾸면 닿게 되는 경우도 있습니다.
그중 하나만 보여 줍니다. 거리가 같은 경로가 여럿일 때 어느 것이 나올지는 정점이 확정되는 순서에 달려 있으며, 이 도구는 결과가 재현되도록 «거리가 같으면 이름이 앞선 정점 먼저»로 정해 두었습니다. 어느 경로를 고르든 거리는 같습니다.
전송되지 않습니다. 계산은 전부 브라우저 안에서 이뤄지고, 입력값은 이 브라우저의 localStorage에만 남습니다.
알아두면 좋은 점
- 우선순위 큐 대신 매번 훑어 최솟값을 찾습니다(O(V²)). 화면에 그릴 만한 크기에서는 차이가 없고 절차가 그대로 드러나는 편이 낫기 때문입니다. 정점은 200개까지 다룹니다.
- 같은 두 정점 사이에 간선이 여러 개면 모두 살펴보므로 가장 짧은 것이 자연히 쓰입니다.
- 음수 가중치가 있으면 결과를 참고용으로만 보세요. 이 도구는 계산을 멈추지 않고 값과 경고를 함께 보여 줍니다.
- 거리 계산은 서로 다른 논리인 벨만-포드와 무작위 그래프 200개에서 대조해 맞췄습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.