예제 #1
0
        private static RouteWithDistanceFromStart StartRoute(City origin)
        {
            var initialRoute = new RouteWithDistanceFromStart();

            initialRoute.AppendCity(origin, 0);
            return(initialRoute);
        }
예제 #2
0
            public object Clone()
            {
                var clone = new RouteWithDistanceFromStart();

                foreach (var city in Cities)
                {
                    clone.AppendCity(city, 0);
                }
                clone.DistanceFromStart = DistanceFromStart;
                return(clone);
            }
예제 #3
0
        private void FindAllPossibleRoutes(List<Track> railRoad, City origin, RouteWithDistanceFromStart runningRoute)
        {
            var possibleTracks = railRoad.FindAll(track => track.Origin.Equals(origin));
            foreach (var track in possibleTracks)
            {
                var route = (RouteWithDistanceFromStart)runningRoute.Clone();
                route.AppendCity(track.Destination, track.Distance);

                if (ThisTrackWillLeadMeToDestination(track))
                    possibleRoutes.Add(route);

                if (ShouldKeepRunningInThisRoute(runningRoute, track))
                    FindAllPossibleRoutes(railRoad, track.Destination, route);
            }
        }
예제 #4
0
        private void FindAllPossibleRoutes(List <Track> railRoad, City origin, RouteWithDistanceFromStart runningRoute)
        {
            var possibleTracks = railRoad.FindAll(track => track.Origin.Equals(origin));

            foreach (var track in possibleTracks)
            {
                var route = (RouteWithDistanceFromStart)runningRoute.Clone();
                route.AppendCity(track.Destination, track.Distance);

                if (ThisTrackWillLeadMeToDestination(track))
                {
                    possibleRoutes.Add(route);
                }

                if (ShouldKeepRunningInThisRoute(runningRoute, track))
                {
                    FindAllPossibleRoutes(railRoad, track.Destination, route);
                }
            }
        }
 protected override bool ShouldKeepRunningInThisRoute(RouteWithDistanceFromStart runningRoute, Track track)
 {
     return(!(runningRoute.Cities.Contains(track.Destination) && !track.Destination.Equals(FinalDestination)));
 }
 protected override bool ShouldKeepRunningInThisRoute(RouteWithDistanceFromStart runningRoute, Track track)
 {
     return !(runningRoute.DistanceFromStart >= distanceLimit);
 }
예제 #7
0
 protected override bool ShouldKeepRunningInThisRoute(RouteWithDistanceFromStart runningRoute, Track track)
 {
     return(!(runningRoute.DistanceFromStart >= distanceLimit));
 }
 protected override bool ShouldKeepRunningInThisRoute(RouteWithDistanceFromStart runningRoute, Track track)
 {
     return !(runningRoute.Cities.Contains(track.Destination) && !track.Destination.Equals(FinalDestination));
 }
예제 #9
0
 private static RouteWithDistanceFromStart StartRoute(City origin)
 {
     var initialRoute = new RouteWithDistanceFromStart();
     initialRoute.AppendCity(origin, 0);
     return initialRoute;
 }
예제 #10
0
 protected abstract bool ShouldKeepRunningInThisRoute(RouteWithDistanceFromStart runningRoute, Track track);
예제 #11
0
 public object Clone()
 {
     var clone = new RouteWithDistanceFromStart();
     foreach (var city in Cities)
         clone.AppendCity(city, 0);
     clone.DistanceFromStart = DistanceFromStart;
     return clone;
 }
예제 #12
0
 protected abstract bool ShouldKeepRunningInThisRoute(RouteWithDistanceFromStart runningRoute, Track track);