A heap based implementation of Dijkstra's shortest paths algorithm