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

1 ... 81 82 83 [ 84 ] 85 86 87 ... 156


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



1 ... 81 82 83 [ 84 ] 85 86 87 ... 156

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