Exemple #1
0
        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);
        }
Exemple #2
0
        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());
        }
Exemple #3
0
 static void DisplayRouteInfo(ExtendedRoute route, Func <ExtendedRoute, object> infoToDisplay)
 {
     if (route == null)
     {
         Console.WriteLine("NO SUCH ROUTE");
     }
     else
     {
         Console.WriteLine(infoToDisplay(route));
     }
 }
Exemple #4
0
        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);
        }
Exemple #5
0
 static void DisplaRouteDistance(ExtendedRoute route)
 {
     DisplayRouteInfo(route, (r) => r.Distance);
 }