private void AddFlight(FlatFlight flight) { if (Airports.Count == 0) { Airports.Add(flight.Departure); } Airports.Add(flight.Arrival); }
private void Search(AirportChain chain, FlatFlight startFlight, FlatFlight[] flights, int level) { if (_finishAirports.Contains(startFlight.Arrival)) { if (level == _depth) { _chains.Add(chain); } return; } if (level == _depth) { return; } DateTime departureDateTime = startFlight.DateTime.AddHours(_minimalStopHours); int len = flights.Length; int skipCount = 0; for (; skipCount < len; skipCount++) { if (flights[skipCount].DateTime > departureDateTime) { break; } } var xFlights = flights .Skip(skipCount) .ToArray(); if (xFlights.Length == 0) { return; } var startFlights = xFlights .Where(flight => flight.Departure == startFlight.Arrival) .GroupBy(flight => flight.Arrival) .Select(group => group.OrderBy(flight => flight.DateTime).FirstOrDefault()) .ToList(); int count = startFlights.Count; for (int i = 0; i < startFlights.Count; i++) { var flight = startFlights[i]; if (level < 3) { Console.WriteLine("{0} {1} of {2}", new string('>', level), i, count); } Search(chain.Next(flight), flight, xFlights, level + 1); } }
public AirportChain Next(FlatFlight flight) { return new AirportChain(this, flight); }
private AirportChain(AirportChain chain, FlatFlight flight) { Airports = new List<string>(chain.Airports); AddFlight(flight); }
public AirportChain(FlatFlight flight) { AddFlight(flight); }