|
Программирование >> Формирование пользовательского контейнера
public: Помещает рейсы в базу данных. void addflight(string from, string to, int dist) { flights .pushbaclc(Flightlnfo(from, to, dist)) ; Показывает маршрут и общую длину, void route(); Определяет, есть ли маршрут между from и to. void findroute(string from, string to); Возвращает true, если маршрут был найден, bool routefoundO { return btStaclc. size О != 0; Возвращает рейс из вершины стека. Flightlnfo getTOSO { return btStaclc. top () ; Переустанавливает все поля skip, void resetAllSkipO ; Удаляет рейс. , void remove(Flightlnfo f); Показывает маршрут и его длину. void Search::route() stack<Fl ight Info rev; int dist = 0; Flightlnfo f; Меняет порядок стека на противоположный для отображения маршрута. while (! btstack. enpty ()) { f = btStack.topO ; rev.push(f); btStack.popO ; Отображает маршрут, while (! rev. enpty О ) { f = rev.topO; rev.popO ; cout f.from to ; dist += f.distance; cout f.to endl; cout Distance is dist endl; Если есть рейс между from и to, запоминает расстояние б dist. Возвращает true, если рейс существует, и false - в противном случае. bool Search: :match(string from, string to, int &dist) { for(unsigned i=0; i < flights.sizeO; i++) { if(flights[i].from == from && flights[i].to == to && !flights[i].skip) flights[i].skip = true; предотвращает повторное использование dist = flights[i].distance; return true; return false; не найден Ч Для заданного from находит любой рейс. Ч Возвращает true, если рейс найден. return false; Определяет, есть ли маршрут между from и to. void Search::findroute(string from, string to) { int dist; Flightlnfo f; Проверяет, не достигнута ли цель, if(match(from, to, dist)) { btStack.push(FlightInfo(from, to, dist)); . return; Пробует другой рейс, if(find(frbm, f)) { btStack.push(FlightInfo(from, to. f.distance)); findroute(f.to. to); else if (!btStack.enptyO ) { Возвращается на шаг назад и пробует другой рейс. f = btStack.top(); btStack.popO ; findroute(f.from, f.to); и false - в противном случае. bool Search: :find(string from, Flightlnfo Set) for(unsigned i=0; i < flights.sizeO; i++) { if(flights[i].from == from && !flights[i].skip) { f = flights[i]; flights[i].skip = true; предотвращает повторное использование return true;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |