маршруту.
Тип Link призначений для зберігання інформації про частини маршруту між двома містами, з'єднаними одним рейсом. Крім посилання на попередню таку частину він містить посилання на рейс, коди початкового і кінцевого міста, загальну ціну ділянки, час відправлення, відносно заданого користувачем час відправлення, загальний час шляху по ділянці. Типи полів і обгрунтування їх вибору обговорювалися вище. У сукупності ланцюжок таких елементів задає один маршрут.
Тип AnswerList призначено відповіді - множини всіх допустимих маршрутів. Представляє з себе односпрямований список, в кожному елементі якого окрім посилання на наступний є поле типу маршрут (Link), загальний час шляху, загальна максимальна і мінімальна ціна, кількість пересадок. Типи полів і обгрунтування обговорювалися вище.
Зовнішнє уявлення:
Транспортна система зберігається в зовнішньому текстовому файлі. Файл може бути створений будь-яким текстовим редактором. У файлі вказується наступне:
Кількість міст. З наступного рядка починається інформація про міста: назва міста, на наступному рядку координати. Після всіх міст починається інформація про рейсах: компанія, номер, тип, класи, кількість станцій; номер міста, час шляху, час стоянки ціна за класами, для кожного міста; час відправлення від початковій станції. p> Так як ця інформація редагується вкрай рідко, причому розробником мережі, то такий спосіб є найбільш прийнятним.
Назва міст вводяться як рядки, дата - у будь-якому форматі (дд-мм-рр, дд-мм-рррр, дд-міс-рр і т.п.) час гг: мм. Типово покладається дата - поточний день, час 0:00.
Максимальний час шляху, максимальне число пересадок, максимальна ціна - вводяться як числа.
Алгоритм p> Begin
{Завантаження транспортної схеми};
{Введення вихідних даних і заповнення шаблону};
{Виклик процедури пошуку з введеним шаблоном, побудована частина маршруту - порожня};
{Висновок отриманого безлічі маршрутів}
End
{Процедура пошуку маршруту з даними шаблоном і вже побудованої частиною маршруту}
Begin
While {переглянуті не всі рейси} do begin
If {відповідає тип транспорту} and {Поточний рейс не дорівнює попередньому} then
Begin
If {місто відправлення присутній у рейсі, причому раніше кінцевої станції} then begin
{Розрахувати час відправлення найближчого наступного рейсу}
Repeat
{Перейти до наступного міста};
{Розрахувати час дороги з урахуванням нового ділянки}
If {поточний місто ще не проїжджали} and {час шляху не перевищує максимального}
and {кількість пересадок не перевищує максимального} and {Не приїхали [1] } p> then {Додати до маршруту проїхавши ділянку. Викликати процедуру пошуку маршруту p> від поточного міста до кінцевого з новими значеннями часу}
Until {поточний місто проїжджали} or {час вичерпано} or {Приїхали} or {Кінець рейсу};