|
Программирование >> Формирование пользовательского контейнера
II Получает пункты отправления и назначения, cout From? ; cin.getline(from, 40); cout To? ; cin.getline(to, 40); Находит множественные решения. for(;;) { Проверяет, есть ли рейс. ob.findroute(from, to); Если не найден ни один новый маршрут, завершается, if (!оЬ.routefoundo ) break; Сохраняет рейс на вершине стека (on top-of-stack). f = ob.getTOSO ; Ob.routeO; отображает текущий маршрут ob.resetAllSkipO ; переустанавливает поля skip Удаляет из базы данных последний рейс из предыдущего решения. ob.remove(f); return 0; Для удаления последнего рейса, включенного в предыдущее рещение, функция main о получает его с помошью вызова функции getTOSO, которая объявлена как встроенная функция в классе Search. l Возвращает рейс из вершины стека, flightlnfo getTOSO { return btstack.top(); Листинг 7.6. Программа поиска для получения множественных решений методом удаления узла #include <iostream> #include <stack> #include <string> #include <vector> using namespace std; Информация о рейсах. Функция getTOso возврашает информацию о последнем рейсе маршрута хранящемся на верщине стека возврата. Для действительного удаления этого рейса функция main о вызывает функцию remove (), приведенную далее. Удаляет рейс. void Search::remove(Flightlnfo f) ( for (unsigned i=0; i< flights.sizeO; i++) if(flights[i].from == f.from && flights[i].to == f.to) flights[i].from = ; Удаление рейса заключается в присваивании пустой строки переменной from, содержащей название пункта отправления. Для очистки полей skip функция main о вызывает функцию resetAilskip (), Приведенную далее. Переустанавливает все поля skip, void Search::resetAilskipО { for(unsigned i=0; i< flights.sizeO; i++) flights[i] .skip false; Функция resetAilskip о просто присваивает всем полям skip значение false (не забудьте добавить прототипы для функций resetAilskip О и remove о В раздел объяВЛеНИЯ класса Search). Поскольку внесено достаточно много изменений, для большей наглядности программа с применением метода удаления узла приведена полностью в листинге 7.6. Обратите внимание на то, что она тоже использует первоначальную программу поиска в глубину из листинга 7.1. gtruct Flightlnfo { string from; пункт отправления string to; пункт назначения int distance; расстояние между from и to ]эоо1 skip; используется при возврате FlightlnfoO { from = ; to = ; distance = 0; skip = false; Flightlnfo(string f, string t, int d) ( from = f; to = t; distance = d; skip = false; Ищет множественные решения с помощью удаления узлов, class Search { Этот вектор содержит информацию о рейсах. vector<FlightInfo> flights; Этот стек используется для возврата или отката. Stack<FlightInfo> btStack; Если есть рейс между from и to, запоминает расстояние в dist. Возвращает true, если рейс существует, и false - в противном случае. bool match (string from, string to, int bdist); Для заданного from находит любой рейс. Возвращает true, если рейс найден, и false - в противном случае, bool find(string from, Flightlnfo &f);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |