コード例 #1
0
 protected internal static NextAirport GetNextStation(string stationCode)
 {
     try
     {
         using (var textFile = System.IO.File.OpenText("nextStations.txt"))
         {
             string line = null;
             while ((line = textFile.ReadLine()) != null)
             {
                 string[] temp = line.Split(";", System.StringSplitOptions.RemoveEmptyEntries);
                 if (temp[0] == stationCode)
                 {
                     NextAirport nextAirport = new NextAirport(temp[0], temp[1], -1, JsonConvert.DeserializeObject <LinkedList <Airport> >(temp[2]));
                     return(nextAirport);
                 }
             }
         }
     }
     catch (Exception a)
     {
         Console.WriteLine(a.Message);
     }
     return(null);
 }
コード例 #2
0
ファイル: Graph.cs プロジェクト: FairyFox5700/Airports
        protected static internal NextAirport DijkstraMinPath(string sourceCode, string destinationCode)
        {
            try {
                Queue <NextAirport> flight  = new Queue <NextAirport>();
                List <string>       visited = new List <string>();
                Stack <NextAirport> result  = new Stack <NextAirport>();
                Airport             source  = AirlineData.GetAirPort(sourceCode);
                var next = AirlineData.GetNextStation(sourceCode);
                next.Weight = 0;//sorce
                flight.Enqueue(next);
                result.Push(next);
                double BestPrice = 0;
                var    counter   = 0;
                while (flight.Count != 0)
                {
                    var _flight = flight.Dequeue();         //remove first minimum
                    if (_flight.Current == destinationCode) //we are here
                    {
                        return(_flight);
                    }

                    foreach (var neighbour in _flight.adjacementList)
                    {
                        if (neighbour != null)
                        {
                            // NextAirport _next = new NextAirport(neighbour.IATA, ,);
                            NextAirport _next = AirlineData.GetNextStation(neighbour.IATA);

                            //BestPrice = _flight.Weight + GetPriceByPath(_flight.Current, neighbour.IATA);
                            if (!visited.Contains(neighbour.IATA) && _next != null)
                            {
                                _next.Weight = GetPriceByPath(_flight.Current, neighbour.IATA);

                                Console.Write(counter);
                                Console.WriteLine(neighbour.IATA);

                                if (BestPrice == 0)
                                {
                                    BestPrice = GetPriceByPath(_flight.Current, neighbour.IATA);//_next.weight;
                                }
                                else
                                {
                                    if (BestPrice > _next.Weight)
                                    {
                                        BestPrice = _next.Weight;
                                        result.Push(_next);
                                    }
                                }
                                flight.Enqueue(_next);
                                SortQueue(ref flight);
                                visited.Add(_flight.Current);
                            }
                        }
                    }
                    counter++;
                }

                Console.ReadKey();
            }
            catch (Exception r)

            {
                Console.WriteLine(r);
            }

            return(null);
        }