para cada i de 0 até n-1:
D[i] ← ∞
P[i] ← -
Mark[i] ← UNVISITED
D[s] ← 0
inserir (s, s, 0) em H
enquanto H não estiver vazia:
(p, v) ← removemin(H)
se v já foi visitado: continuar
marcar v como VISITED
para cada vizinho w de v:
se não visitado e D[w] > D[v] + peso(v, w):
D[w] ← D[v] + peso(v, w)
P[w] ← v
inserir (v, w, D[w]) em H