|
Программирование >> Формирование пользовательского контейнера
258 Oiaea? public: Помещает рейсы в базу данных. void addflight(string from, string to. int dist) { flights.push back(FlightInfo(from, to, dist)); Показывает маршрут и общее расстояние, void route(); Определяет, есть ли маршрут между from и to. void findroute(string from, string to); Возвращает true, если маршрут был найден. bool routefoundO { return ! btStack. enpty () ; Отобргикает маршрут и его длину. void Search::route() stack<FlightInfo> rev; int dist = 0; Flightlnfo f; Для отображения маршрута меняет порядок стека на противоположный, while(!btStack.emptyO) { f = btStack.top О; rev.push{f); btStack.popO ; Отображает маршрут, while(!rev.enptyO ) { f = rev. top0 ; 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.size(); i++) { if(flights[ij.from == from && flights[i].to == to && !flights[i].skip) flights[i].skip = true; препятствует повторному использованию dist = flights[i].distance; return true; return false; не найден Для заданного from находит любой прямой рейс. Возвращает true, если рейс найден, и false - в противном случае, bool Search::find(string from, Flightlnfo &f) { 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; 260 Гпав return false; Способ поиска в глубину. Определяет, есть ли маршрут между from и to. void Search::findroute(string from, string to) { int dist; Flightlnfo f; Проверяет, не достигнута ли цель, if(match(from, to, dist)) { btStaclc.push(FlightInfo(from, to, dist)); return; Пробует другой маршрут, if(find(from, f)) { btStaclc.push(FlightInfo(from, to, f .distance)); findroute(f.to, to); else if (!btStaclc.emptyO) { Поднимается на уровень вверх и проверяет другой маршрут, f = btStaclc. top(); btStack.popO ; findroute(f.from, f.to); int mainO { char to[40], from[40]; Search ob; Добавляет рейсы в базу данных. ob.addflight( New York . Chicago , 900);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |