implementing dijkstras