Panswer ^. next: = W ^. next; {Додавання маршруту в знайдене місце}
W ^. next: = Panswer;
end
end;
{Повертає посилання на інформацію про I-ої станції прямування}
Function CityInPath (A: Pway; I: citycode): WayP;
var P: Pway;
Begin
P: = A;
While I> 4 do begin I: = I-4; P: = P ^. next end; {Пошук четвірки в якій дана станція}
CityInPath: = @ P ^. Way [I]; {Результат}
end;
const ReBoadingDelay = 120; {Мінімальна час пересадки}
{Повертає час до следещего після зазначеного часу time отоправленіе від станції}
{номер N рейсу A}
Function DepartureDelay (A: PFlight; N: CityCode; time: week): word;
var S: word; I: 1 .. 4; P: PWay; Q: DayTable;
begin
P: = A ^. ​​path;
S: = 0;
While N> 4 do begin
N: = N-4;
For I: = 1 to 4 do S: = S + P ^. Way [I]. delay + P ^. Way [I]. reboard; {Підрахунок часу шляху по повним четвіркам}
P: = P ^. next;
end;
For I: = 1 to N do S: = S + P ^. Way [I]. Delay + P ^. Way [I]. Reboard; {Підрахунок за неповної четвірці}
time: = (10080 + time-(S mod 10080)) mod 10080; {Час відправлення цього рейсу від початкової станції}
Q: = A ^. ​​Table;
while (Q <> nil) and (Q ^. Time
If Q <> nil then Departuredelay: = Q ^. Time-time else {Якщо на поточному тижні не знайдене}
DepartureDelay: = 10080-time + (A ^. Table) ^. time; {Пошук ближайщего часу наступного тижня}
end;
{Пошук усіх можливих маршрутів, задовольняють Pattern}
Procedure Search (FlightList: Pflight; const Pattern: Blank; Path: Link);
Var P: Pflight; I, J: CityCode; D, DDelay: Word; K: WayClass; B1, B2: Boolean;
NPattern: Blank; NPath: Link; c: Longint;
{Перевірка допустимості маршруту (перевірка дублювання міста)}
Function Posible (P: Link; L: CityCode): Boolean;
Var b: boolean; i: citycode; Q: pway;
Begin
b: = true;
While (P <> nil) and b do begin {Перегляд всіх предидущих пересадок}
Q: = P ^. flight ^. path;
i: = 1;
while Q ^. Way [i]. City <> P ^. Bcity do begin {Пошук міста відправлення}
i: = (i mod 4) +1; if i = 1 then Q: = Q ^. Next;
end;
repeat
b: = Q ^. way [i]. city <> L; {Перевірка міста на дублювання}
i: = (i mod 4) +1; if i = 1 then Q: = Q ^. Next
until (Q ^. way [i]. city = P ^. target) or not b; {перехід до наступного поки не місто призначення}
p: = p ^. last
end;
Posible: = b;
End;
begin
New (NPath);
NPath ^. last: = Path;
P: = FlightList;
While P <> nil do begin {Перегляд всіх рейсів}
if ((Path = nil) or (P <> Path ^. Flight...