next: PFlight;
end;
Blank = record {Шаблон для пошуку шляху}
delay: Week;
BCity, ECity: CityCode;
Kind: array [WayKind] of boolean;
ReBoading: CityCode;
WayTime: Integer;
Cost: Longint;
Class: WClass;
end;
Link = ^ CityList; {Ланцюжок рейсів для проїзду від початку до кінця}
CityList = record {Інформація про проїзд між двома пунктами одним рейсом}
DDelay: Word;
waytime: word;
cost: mcost;
Bcity, Target: CityCode;
Flight: PFlight;
Last: Link;
end;
AnswerList = ^ IAnswer; {Список всіх можливих маршрутів прямування}
IAnswer = record
path: link;
reboard: citycode;
mincost, maxcost: longint;
waytime: word;
next: AnswerList;
end;
var Lanswer: AnswerList; {глобальна змінна - початок списку маршрутів}
{Додавання нового знайденого маршруту}
Procedure Answer (A: Link; cost: longint);
var P, Q: Link; d, s1, s2: word; W, PAnswer: answerlist; r: citycode;
function min (a: mcost): longint; {Мінімальна вартість по класах}
var i: integer; m: longint;
begin
m: = 1000000000;
for i: = 1 to Mclass do if (m> a [i]) and (a [i]> 0) then m: = a [i];
min: = m
end;
function max (a: mcost): longint; {Максимальна вартість по класах}
var i: integer; m: longint;
begin
m: = a [1];
for i: = 2 to Mclass do if m
max: = m
end;
begin
new (PAnswer);
Panswer ^. path: = nil;
P: = A;
s1: = 0; s2: = 0; {верхня і нижня межі ціни}
r: = 1; {кількість пересадок}
d: = 0; {час шляху}
Repeat
s1: = s1 + min (P ^. cost); {Підрахунок суми параметрів по рейсах у маршруті}
s2: = s2 + max (P ^. cost);
d: = d + P ^. ddelay + P ^. waytime;
P: = P ^. last; {Перехід до наступного рейсу у маршруті}
inc (r);
Until P = nil;
if s1 <= cost then begin {Якщо відповідає ціна}
P: = A;
Repeat
new (Q); {Збірка ланцюжка рейсів маршруту}
Q ^: = P ^;
Q ^. last: = Panswer ^. path;
Panswer ^. path: = Q;
P: = P ^. last; {Перехід до наступного рейсу у маршруті}
Until p = nil;
Panswer ^. mincost: = s1; Panswer ^. Maxcost: = s2; {Збереження сумарних цін і часу}
Panswer ^. waytime: = d; Panswer ^. reboard: = r; {І числа пересадок в елементі маршруту}
W: = LAnswer;
While (W ^. next <> nil) and ((W ^. Next) ^. Waytime
While (W ^. next <> nil) and ((W ^. Next) ^. Reboard
...