Exemplo n.º 1
0
        private static bool DoDepthFirstSearchingAux(Dictionary<string, int> existingRoutes, ref MaxTripsResult runningResult, string fromToKey, string requestedRoute, ref int runningStops, int maxStops)
        {
            // Concept: the minute you have entered this function, you have gone from...to.  (See fromToKey.)  So update recordkeeping now.
            UpdateRunningStops(ref runningStops);
            if (!CheckIfMaxStopsExceeded(runningStops, maxStops)) return false;

            runningResult.Legs.Add(new Trip{Leg = fromToKey, Distance = existingRoutes[fromToKey]});

            var requestedDest = requestedRoute[1];
            var currentDest = fromToKey[1];

            if (YouHaveReachedYourDestination(requestedDest, currentDest))
                return true;

            var nextLocation = currentDest;
            var possibleRoutes = existingRoutes.Where(r => r.Key[0] == nextLocation);

            if (!possibleRoutes.Any())
                return false;

            foreach (var route in possibleRoutes)
            {
                var savedRunningResult = runningResult;
                if (DoDepthFirstSearchingAux(existingRoutes, ref savedRunningResult, route.Key, requestedRoute, ref runningStops, maxStops))
                {
                    return true;
                }
                runningResult = savedRunningResult;
            }

            return false;
        }
Exemplo n.º 2
0
        private static List<MaxTripsResult> DoDepthFirstSearching(Dictionary<string, int> availableRoutes, string requestedRoute, int maxStops)
        {
            var results = new List<MaxTripsResult>();

            var possibleLegs = availableRoutes.Where(r => r.Key[0] == requestedRoute[0]);

            foreach (var legs in possibleLegs)
            {
                var tempResult = new MaxTripsResult {Legs = new List<Trip>()};
                var runningStops = 0;
                if (DoDepthFirstSearchingAux(availableRoutes, ref tempResult, legs.Key, requestedRoute, ref runningStops, maxStops))
                {
                    results.Add(tempResult);
                };
            }

            return results;
        }
            public void OneTripReturnedLessThanMaxStops()
            {
                var requestedTrip = "AD";
                var exactStops = 2;
                var threeStopTrip = new List<Trip>{new Trip(), new Trip(), new Trip(), new Trip()};
                var maxTripsResult = new MaxTripsResult{Legs = threeStopTrip};
                var oneTripReturned = new List<MaxTripsResult>
                {
                    maxTripsResult,
                };

                _maxTripsCalculator.Expect(
                    mtc =>
                        mtc.Invoke(Arg<Dictionary<string, int>>.Is.Anything, Arg<string>.Is.Anything,
                            Arg<int>.Is.Anything)).Return(oneTripReturned);

                var numTrips = _calcer.Invoke(_possibleLegs, requestedTrip, exactStops);

                Assert.That(numTrips, Is.EqualTo(0));
            }
Exemplo n.º 4
0
 private static bool ResultMatchesRequestedStops(int exactStops, MaxTripsResult result)
 {
     return result.Legs.Count - 1 == exactStops;
 }