(* weighted single-source shortest path (broken!) *) let val q = new_queue() val dist: VertexMap.map = create_vertexMap() fun expand(v: vertex) = let val d: int = valOf(get(visited, v)) fun handle_edge(e: edge) = let val (_, v', w) = Graph.edgeinfo(e) in case get(visited, v') of SOME(d') => () | NONE => ( add(dist, v', d+w); enqueue(q, v') ) end in app handle_edge (Graph.outgoing(v)) end in add(visited, v0, 0); enqueue(q, v0); while (not (empty_queue(q))) do expand(dequeue(q)) end