コード例 #1
0
 private void AddFlight(FlatFlight flight)
 {
     if (Airports.Count == 0) {
         Airports.Add(flight.Departure);
     }
     Airports.Add(flight.Arrival);
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
 public AirportChain Next(FlatFlight flight)
 {
     return new AirportChain(this, flight);
 }
コード例 #4
0
 private AirportChain(AirportChain chain, FlatFlight flight)
 {
     Airports = new List<string>(chain.Airports);
     AddFlight(flight);
 }
コード例 #5
0
 public AirportChain(FlatFlight flight)
 {
     AddFlight(flight);
 }