Курсовая работа: Структуры данных и алгоритмы
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<time+ReboadingDelay) do Q:=Q^.next; {Поискближайшеговременинатекущейнеделе}
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;