Beispiel #1
0
        public FlightNetwork(ILoader data, IGraphNetwork graph)
        {
            this.airlines = data.Airlines;
            this.airports = data.Airports;
            this.routes   = data.Routes;

            this._graphNetwork = graph;
        }
Beispiel #2
0
        private Func <AirportModel, IEnumerable <AirportModel> > ShortestPathFunction(IGraphNetwork graph, AirportModel start)
        {
            var previous = new Dictionary <AirportModel, AirportModel>(new AirportModel.EqualityComparer());
            var queue    = new Queue <AirportModel>();

            queue.Enqueue(start);

            while (queue.Count > 0)
            {
                var vertex = queue.Dequeue();
                foreach (var neighbor in graph.AdjacencyList[vertex])
                {
                    if (previous.ContainsKey(neighbor.Item1))
                    {
                        continue;
                    }

                    previous[neighbor.Item1] = vertex;
                    queue.Enqueue(neighbor.Item1);
                }
            }

            Func <AirportModel, IEnumerable <AirportModel> > shortestPath = v =>
            {
                var path = new List <AirportModel> {
                };

                var current = v;
                while (!current.Equals(start) && previous.Count > 0)
                {
                    path.Add(current);

                    AirportModel previousValue;
                    bool         exist = previous.TryGetValue(current, out previousValue);

                    if (!exist)
                    {
                        throw new NoRouteFoundException();
                    }

                    if (previous[current] != null)
                    {
                        current = previous[current];
                    }
                }
                ;

                path.Add(start);
                path.Reverse();

                return(path);
            };

            return(shortestPath);
        }