public FlightNetwork(ILoader data, IGraphNetwork graph) { this.airlines = data.Airlines; this.airports = data.Airports; this.routes = data.Routes; this._graphNetwork = graph; }
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); }