Search(s)
d[s] = 0
pred[s] = null
PQ = {s}
Open = {s}
Closed = {}
while PQ ≠ {} do
u = Remove[PQ]
Remove(Open,u)
Add(Closed,u)
if success
then return u
else
for each v ∈ Expand(u) do
Add(PQ, v)
Add(Open, v)
return null