Esempio n. 1
0
        public void ShortestConnectedRouteTest()
        {
            var            origin      = AirportsMock.Airports[0].Iata;
            var            destination = AirportsMock.Airports[6].Iata;
            ConnectedRoute route       = _appRoutes.FindShortestRoute(origin, destination);

            Assert.Equal(route.Routes, ConnectedRoutesMock.MultipleRouteConnectedRoutes[2].Routes);
        }
Esempio n. 2
0
        public void InexistentRouteTest()
        {
            var            origin      = AirportsMock.Airports[0].Iata;
            var            destination = AirportsMock.Airports[8].Iata;
            ConnectedRoute route       = _appRoutes.FindShortestRoute(origin, destination);

            Assert.Null(route);
        }
        public ConnectedRoute FindShortestRoute(string origin, string destination)
        {
            Validator.Validate(origin, destination);

            Airport originAirport      = _repository.List <Airport>().FirstOrDefault(a => a.Iata == origin);
            Airport destinationAirport = _repository.List <Airport>().FirstOrDefault(a => a.Iata == destination);

            Validator.Validate(originAirport, destinationAirport);

            List <Route>        routes        = _repository.List <Route>(r => r.Airline, r => r.Origin, r => r.Destination);
            ShortestRouteFinder routeFinder   = new ShortestRouteFinder(originAirport, destinationAirport, routes);
            ConnectedRoute      shortestRoute = routeFinder.FindShortestRoute();

            return(shortestRoute);
        }
        private List <ConnectedRoute> FindNextConnectionsFromRoute(ConnectedRoute route)
        {
            var          resultConnectedRoutes = new List <ConnectedRoute>();
            List <Route> newPossibleRoutes     = _routes.Where(r => r.Origin.Equals(route.Destination)).ToList();

            foreach (var newRoute in newPossibleRoutes)
            {
                if (!_connectedAirportCodes.Contains(newRoute.Destination.Iata))
                {
                    var newConnectedRoute = new ConnectedRoute(route.Routes);
                    newConnectedRoute.AddRoute(newRoute);
                    resultConnectedRoutes.Add(newConnectedRoute);

                    _connectedAirportCodes.Add(newRoute.Destination.Iata);
                }
            }

            return(resultConnectedRoutes);
        }
        public ConnectedRoute FindShortestRoute()
        {
            _connectedAirportCodes.Add(_origin.Iata);
            _connectedRoutes = FindConnectionsFromOrigin();

            while (_connectedRoutes.Any() && !_connectedAirportCodes.Contains(_destination.Iata))
            {
                List <ConnectedRoute> temporaryConnectedRoutes = new List <ConnectedRoute>();
                foreach (var connectedRoute in _connectedRoutes)
                {
                    List <ConnectedRoute> newRoutes = FindNextConnectionsFromRoute(connectedRoute);
                    temporaryConnectedRoutes.AddRange(newRoutes);
                }
                _connectedRoutes = temporaryConnectedRoutes;
            }

            ConnectedRoute result = _connectedRoutes.Any() ?
                                    _connectedRoutes.FirstOrDefault(r => r.Destination.Equals(_destination)) :
                                    null;

            return(result);
        }