functional dijkstra code