public TravelAgency(IDatabase <IAccomodation> bookingDatabase, IDatabase <IReview> oysterDatabase, IDatabase <IPhoto> stockDatabase, IDatabase <IAttraction> tripAdvisorDatabase) { this.bookingIterator = bookingDatabase.GetIterator(); this.oysteIterator = oysterDatabase.GetIterator();; this.stockIterator = stockDatabase.GetIterator();; this.tripAdvisorIterator = tripAdvisorDatabase.GetIterator(); this.bookingDescrambler = new BookingDescramblerFactory().GetDescrambler(); this.stockDescrambler = new ShutterStockDescramblerFactory().GetDescrambler(); this.tripAdvisorDescrambler = new TripAdvisorDescramblerFactory().GetDescrambler(); }
public IEnumerable <Route> Solve(IGraphDatabase graph, City from, City to) { Dictionary <City, Route> routes = new Dictionary <City, Route>(); routes[from] = null; Queue <City> queue = new Queue <City>(); queue.Enqueue(from); do { City city = queue.Dequeue(); /* * For each outgoing route from city... */ IDatabaseIterator <Route> iter = graph.GetRoutesFrom(city); while (iter.HasNext()) { Route route = iter.GetCurrent(); /* Change to current Route*/ if (routes.ContainsKey(route.To)) { continue; } routes[route.To] = route; if (route.To == to) { break; } queue.Enqueue(route.To); } } while (queue.Count > 0); if (!routes.ContainsKey(to)) { return(null); } List <Route> result = new List <Route>(); for (Route route = routes[to]; route != null; route = routes[route.From]) { result.Add(route); } result.Reverse(); return(result); }
public IEnumerable <Route> Solve(IGraphDatabase graph, City from, City to) { Dictionary <City, Route> routes = new Dictionary <City, Route>(); routes[from] = null; Stack <City> stack = new Stack <City>(); stack.Push(from); do { City city = stack.Pop(); IDatabaseIterator <Route> iter = graph.GetRoutesFrom(city); while (iter.HasNext()) { Route route = iter.GetCurrent(); /* Change to current Route*/ if (routes.ContainsKey(route.To)) { continue; } routes[route.To] = route; if (route.To == to) { break; } stack.Push(route.To); } } while (stack.Count > 0); if (!routes.ContainsKey(to)) { return(null); } List <Route> result = new List <Route>(); for (Route route = routes[to]; route != null; route = routes[route.From]) { result.Add(route); } result.Reverse(); return(result); }
public IEnumerable <Route> Solve(IGraphDatabase graph, City from, City to) { Dictionary <City, (double dist, Route last)> distances = new Dictionary <City, (double dist, Route last)>(); HashSet <City> visitedCitites = new HashSet <City>(); distances[from] = (0, null); City minCity = from; while (minCity != to) { /* * For each outgoing route from minCity... */ IDatabaseIterator <Route> iter = graph.GetRoutesFrom(minCity); while (iter.HasNext()) { Route route = iter.GetCurrent(); /* Change to current Route*/ if (visitedCitites.Contains(route.To)) { continue; } double dist = distances[minCity].dist + OptimizingValueFunc(route); if (!distances.ContainsKey(route.To)) { distances[route.To] = (dist, route); } else { if (dist < distances[route.To].dist) { distances[route.To] = (dist, route); } } } visitedCitites.Add(minCity); minCity = null; foreach (var(city, (dist, route)) in distances) { if (visitedCitites.Contains(city)) { continue; } if (minCity == null || dist < distances[city].dist) { minCity = city; } } if (minCity == null) { return(null); } } List <Route> result = new List <Route>(); for (Route route = distances[to].last; route != null; route = distances[route.From].last) { result.Add(route); } result.Reverse(); return(result); }
public PopulationIterator(IDatabaseIterator <Route> iter, int minPopulation) { this.iter = iter; this.minPopulation = minPopulation; }
public HasRestaurantIterator(IDatabaseIterator <Route> iter) { this.iter = iter; }
public PolandTravel(ITravelAgency travelAgency, IDatabase <IAttraction> tripAdvisorDatabase) { this.travelAgency = travelAgency; this.tripAdvisorIterator = tripAdvisorDatabase.GetIterator(); this.tripAdvisorDescrambler = new TripAdvisorDescramblerFactory().GetDescrambler(); }