This is a tightening of the upper bound d(v) on the shortest path weight from s to v.

Maintain d(v) and pred(v) for each vertex v.

Relax(u, v, w)

if d(v) > d(u) + w(u,v)

then d(v) = d(u) + w(u,v)

pred(v) = u

Init-Single-Source(G, s)
; G = (V, E)

foreach v in V

d(v) =

pred(v) = NIL

d(s) = 0

Relaxing after Init-Single-Source will eventually
reach the shortest path weight and predecessor graph will be a shortest
path tree (assuming no negative-weight cycles).