도구스개발

다익스트라 최단경로 계산기

간선 목록에서 시작점부터 모든 정점까지의 최단거리와 경로를 구하고, 정점이 확정되는 순서를 한 단계씩 보여 줍니다. 음수 가중치가 있으면 답을 믿을 수 없다고 알려 줍니다.

한 줄에 «출발 도착 가중치» 하나씩. 화살표(A→B 5)와 쉼표도 받습니다

정점 6개 · 간선 7개

6개 정점에 닿음

A에서 모든 정점에 닿습니다

정점별 최단거리

정점거리경로
A0A
B4A → B
C2A → C
D9A → C → E → D
E5A → C → E
F20A → C → E → D → F

확정되는 순서

#확정거리줄어든 이웃
1A0B ∞→4, C ∞→2
2C2E ∞→5
3B4D ∞→14
4E5D 14→9
5D9F ∞→20
6F20

확정 거리가 줄지 않고 커지기만 하는 것이 다익스트라의 성질입니다. 가중치가 음수가 아니면 «지금 가장 가까운 것»보다 더 짧아질 길이 뒤에 나타날 수 없기 때문입니다.

같은 거리의 경로가 여럿이면 그중 하나만 보입니다. 어느 것이 나올지는 확정 순서에 달렸고, 이 도구는 결과가 재현되도록 «거리가 같으면 이름이 앞선 정점 먼저»로 정해 두었습니다. 거리는 어느 경로를 고르든 같습니다.

사용 방법

  1. 1간선을 한 줄에 «출발 도착 가중치» 하나씩 넣습니다.
  2. 2시작 정점을 정하고 간선에 방향이 있는지 고릅니다.
  3. 3정점별 최단거리와 경로를 확인하고, 확정 순서 표에서 거리가 어떻게 줄어드는지 따라갑니다.

자주 묻는 질문

아직 확정하지 않은 정점 가운데 시작점에서 가장 가까운 것을 하나 골라 확정하고, 그 정점을 거쳐 가면 더 가까워지는 이웃의 거리를 줄이는 일(완화)을 되풀이합니다. 한 번 확정한 정점은 다시 보지 않는데, 가중치가 음수가 아니면 그 거리가 더 줄어들 여지가 없기 때문입니다.

«한 번 확정한 거리는 더 줄지 않는다»는 전제가 깨지기 때문입니다. 먼 정점을 거쳐 가는 길이 음수 간선을 만나 더 짧아질 수 있는데, 이미 확정한 정점은 다시 보지 않으므로 그 길을 놓칩니다. 순서에 따라 우연히 맞기도 하지만 맞았는지 아닌지를 다익스트라만으로는 알 수 없어, 이 도구는 값을 내되 경고를 함께 띄웁니다.

벨만-포드 알고리즘을 씁니다. 모든 간선을 정점 수만큼 훑어 거리를 줄이는 방식이라 느리지만 음수 간선이 있어도 정확합니다. 다만 음수 순환(돌 때마다 총 길이가 짧아지는 고리)이 있으면 최단경로 자체가 정의되지 않으며, 벨만-포드는 그런 순환이 있다는 것을 알려 줄 수 있습니다.

시작 정점에서 갈 길이 아예 없는 정점입니다. 간선에 방향이 있으면 한쪽으로만 갈 수 있어 이런 정점이 자주 생깁니다. 간선 방향을 «없음»으로 바꾸면 닿게 되는 경우도 있습니다.

그중 하나만 보여 줍니다. 거리가 같은 경로가 여럿일 때 어느 것이 나올지는 정점이 확정되는 순서에 달려 있으며, 이 도구는 결과가 재현되도록 «거리가 같으면 이름이 앞선 정점 먼저»로 정해 두었습니다. 어느 경로를 고르든 거리는 같습니다.

전송되지 않습니다. 계산은 전부 브라우저 안에서 이뤄지고, 입력값은 이 브라우저의 localStorage에만 남습니다.

알아두면 좋은 점

  • 우선순위 큐 대신 매번 훑어 최솟값을 찾습니다(O(V²)). 화면에 그릴 만한 크기에서는 차이가 없고 절차가 그대로 드러나는 편이 낫기 때문입니다. 정점은 200개까지 다룹니다.
  • 같은 두 정점 사이에 간선이 여러 개면 모두 살펴보므로 가장 짧은 것이 자연히 쓰입니다.
  • 음수 가중치가 있으면 결과를 참고용으로만 보세요. 이 도구는 계산을 멈추지 않고 값과 경고를 함께 보여 줍니다.
  • 거리 계산은 서로 다른 논리인 벨만-포드와 무작위 그래프 200개에서 대조해 맞췄습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.