internal DayShortestPathDict Execute(AdjacencyGraph <TravelItem, Edge <TravelItem> > graph, Dictionary <Edge <TravelItem>, double> distance, DayTravelDict dayTravel) { var result = new DayShortestPathDict(); foreach (var(day, travel) in dayTravel) { double edgeCost(Edge <TravelItem> edge) => distance[edge]; TravelItem root = travel[0]; var tryGetPaths = graph.ShortestPathsDijkstra(edgeCost, root); TravelItem target = travel[^ 1];
internal CalculatorResult Execute(AdjacencyGraph <TravelItem, Edge <TravelItem> > graph, Dictionary <Edge <TravelItem>, double> distance, List <TravelItem> travelItems, Func <Edge <TravelItem>, double> distanceReceiver) { if (graph is null) { throw new ArgumentNullException(nameof(graph)); } if (distance is null) { throw new ArgumentNullException(nameof(distance)); } if (travelItems is null) { throw new ArgumentNullException(nameof(travelItems)); } var dayCalc = new DayDistanceCalculator(); var pathCalc = new ShortestPathCalculator(); var dayTravelCalc = new DayTravelCalculator(); DayTravelDict dayTravel = dayTravelCalc.Execute(travelItems); (DayDistancesDict dayDistances, DayEdgeDistanceDict edgeDist) = dayCalc.Execute(graph, distance, dayTravel, distanceReceiver); DayShortestPathDict shortestPaths = pathCalc.Execute(graph, distance, dayTravel); return(new CalculatorResult() { DayDistances = dayDistances, DayShortestPath = shortestPaths, DayTravel = dayTravel, DayEdgeDistance = edgeDist }); }