dijkstra Shortest Path
fun <T> dijkstraShortestPath(start: T, isGoal: Predicate<T>, neighbors: Function<T, Iterable<WeightedEdge<T>>>, maxIterations: Int = Int.MAX_VALUE, maxCost: Double = Double.POSITIVE_INFINITY): ShortestPath<T>?
Returns the shortest path from start to the first node where isGoal returns true.
All edge costs must be non-negative.