Изначально все вершины, кроме <tex>s</tex> помещаются в множество <tex>M_2</tex>. Вершина <tex>s</tex> помещается в множество <tex>M_1</tex>.
На каждом шаге выбирается вершина <tex>u</tex> из множества <tex>M_1</tex>. Переводим эту вершину во множество <tex>M_0</tex>. Для каждого ребра <tex>uv</tex>:
* если <tex>v \in M_2</tex>, то переносим <tex>v</tex> в <tex>M_1</tex> и релаксируем ребро <tex>uv</tex>
* если <tex>v \in M_1</tex>, то релаксируем ребро <tex>uv</tex>
* если <tex>c \in M_0</tex>, то переносим <tex>v</tex> в <tex>M_1</tex> и релаксируем ребро <tex>uv</tex>
Алгоритм завершается, когда множество <tex>M_1</tex> становится пустым.
== Псевдокод ==