Задача про транспортную систему. Подбор вариантов проезда с учетом кол-ва пересадок, длительности, видов транспорта (самолет, авто, поезд, водн.) — страница 4

  • Просмотров 4661
  • Скачиваний 359
  • Размер файла 38
    Кб

с данным шаблоном и уже построенной частью маршрута} Begin While {просмотрены не все рейсы} do begin If {соответствует тип транспорта} and {Текущий рейс не равен предыдущему}then Begin If {город отправления присутствует в рейсе, причем раньше конечной станции} then begin {Рассчитать время отправления ближайшего следующего рейса} Repeat {Перейти к следующему городу}; {Рассчитать время дороги с учетом нового участка} If {текущий город еще не проезжали} and

{время пути не превышает максимального} and {количество пересадок не превышает максимального} and {не приехали[1]} then {Добавить к маршруту проеханный участок. Вызвать процедуру поиска маршрута от текущего города до конечного с новыми значениями времени} Until {текущий город проезжали} or {время исчерпано} or {приехали} or {конец рейса}; If {приехали} and {время не превышено} and {минимальная цена рейса не выше допустимой} then {Добавить построенный

маршрут в мно-во ответов на нужное место} end; end; {Перейти к следующему рейсу} end; end 5.    Pascal uses Crt, Date, Graph; Const MaxCity=100; MClass=6; Type CityCode=1..maxcity; {Внутрений код города} Week=0..10079; {Тип время в минутак с 0:00 понедельника} DayTable=^IDayTable; {Таблица отправлений от начальной станции} IDayTable=record Time:Week; Next:DayTable; end; WayKind=1..4; {Тип пути (аэро, море, ж.д, авто)} WayClass=1..MClass; {Класс или тип перевозки} Cities=array[CityCode] of {Названия и координаты городов} record name:string[20]; x,y:word; end;

mcost=array[wayclass] of longint; {Таблица стоимости по классам} Way=record City:Citycode; Delay,Reboard:Word; Cost:mcost; end; WayP=^way; PWay=^Way1; {Информация о городах следования рейса} Way1=record Way:array [1..4] of way; next:PWay; end; wclass=array [WayClass] of boolean; PFlight=^Flight; Flight=record {Информация о рейсе} company:string[20]; number:string[10]; totalstation:CityCode; table:DayTable; path:PWay; kind:WayKind; class:WClass; 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<a[i] then m:=a[i]; 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;