public ExtendedRoute ShortestRoute(Town origin, Town destination) { ExtendedRoute shortestRoute = null; Func <ExtendedRoute, TraverseType> predicate = (ExtendedRoute er) => { if (er.Stops > Towns) { return(TraverseType.Stop); //This is to stop routes thats repeat on themselves } if (er.EndsWith(destination)) { if (shortestRoute == null || shortestRoute?.Distance > er.Distance) { shortestRoute = er; } return(TraverseType.Return); } return(TraverseType.Continue); }; var result = Traverse(origin, predicate); return(shortestRoute); }
public List <ExtendedRoute> Traverse(ExtendedRoute extendedRoute, Func <ExtendedRoute, TraverseType> predicate) { Queue <KeyValuePair <ExtendedRoute, RouteNode> > nodes = new Queue <KeyValuePair <ExtendedRoute, RouteNode> >(); nodes.Enqueue(new KeyValuePair <ExtendedRoute, RouteNode>(extendedRoute, this)); return(Traverse(nodes, predicate).ToList()); }
static void DisplayRouteInfo(ExtendedRoute route, Func <ExtendedRoute, object> infoToDisplay) { if (route == null) { Console.WriteLine("NO SUCH ROUTE"); } else { Console.WriteLine(infoToDisplay(route)); } }
public ExtendedRoute Clone() { var clone = new ExtendedRoute(this.Origin); clone.Distance = this.Distance; foreach (var destinations in this._destinations) { clone._destinations.Add(destinations); } return(clone); }
static void DisplaRouteDistance(ExtendedRoute route) { DisplayRouteInfo(route, (r) => r.Distance); }