input = DirectedGraph g, String s initialize newReachableVertices as PriorityQueue call g.displayProperties.add("isVisited") source = g.getvertex(s) source.distance = 0 source.predecessor = null call newReachableVertices.push(source, 0) while newReachableVertices.isEmpty() = false initialize i as Vertex ask: i = newReachableVertices.pop() if i.isVisited != true then i.isVisited = true forEach j in i.neighbors initialize oldDistance as Integer, newDistance as Integer oldDistance = j.distance newDistance = i.distance + g.d(i, j) if (oldDistance = null) or (newDistance < oldDistance) then j.predecessor = i.value j.distance = newDistance call newReachableVertices.push(j, newDistance) endIf next endIf endWhile finish