Программирование >>  Формирование пользовательского контейнера 

1 ... 90 91 92 [ 93 ] 94 95 96 ... 156


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);



1 ... 90 91 92 [ 93 ] 94 95 96 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика