-Uses a priority queue to keep track of vertexes
-Distance is the distance from the source vertex s to this point
-Path is the vertex that came before this point when you come here from source.
E.g.
s->B->C->D
Path[D] = C
Path C = B
-start off by setting all distances in Distances[] as -1
-Starting with s, we enqueue to the PQ the adjacent vertexes(start with s's adjacents, and then later the adjacents of those adjacents) to be examined and then when examining we update our Distances[] (will be this vertex's distance from s)* and Path[] (this vertex)(fill in Path if not already filled, otherwise skip) arrays.
-Then dequeue the vertex we are already done with.
*we do this if this Distance[x] is equal to -1 (in other words, hasn't already been filled in)