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); }
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); }