Здавалка
Главная | Обратная связь

Пример работы программы

Задача №27: Задача про остановки

Даны остановки, между которыми могут ходить автобусы, троллейбусы и трамваи. Дано время прохождения транспорта между остановками и время ожидания транспорта на остановке. Найти минимальное время поездки между двумя заданными остановками.

 

Алгоритм

Список остановок задается вручную, каждая остановка характеризуется следующими параметрами целочисленного типа:

· Порядковый номер остановки

· Время проезда до следующей остановки на трамвае

· Время ожидания этого трамвая

· Время проезда до следующей остановки на автобусе

· Время ожидания этого автобуса

· Время проезда до следующей остановки на троллейбусе

· Время ожидания этого троллейбуса

В данный список не включается конечная остановка, т.к. маршрут является односторонним, и с конечной остановки невозможно никуда уехать.

Далее рассмотрим правило для подсчёта минимального времени на дорогу из пункта А в пункт Б. Пока переменная Start, начальное значение которой равно номеру стартовой остановки, меньше значения переменной Finish, которая соответствует номеру конечного пункта (если необходимо доехать до конечной остановки, то Finish должна быть равна 8), путём сопоставления выбирается из базы фактов подходящий (имеющий такой же порядковый номер) и заполняются соответствующие переменные.

Далее для поиска минимального времени остановки находится время для каждого транспорта путём нахождения суммы поездки и простоя.

При поездке с остановки на следующую остановку меняется транспорт (даже автобус на другой автобус). Далее это правило рекурсивно вызывается с номером на единицу больше. Рекурсивный вызов правила повторяется до тех пор, пока переменная не станет равной Finish, при которой переменная Time будет равна 0. На каждом уровне рекурсии переменная Time инкрементируется на величину минимального времени.

Правило нахождения минимального времени достаточно просто – один элемент должен быть меньше обоих соседних.

 

Листинг

PREDICATES

stop(integer,integer,integer,integer,integer,integer,integer).

roadtime(integer,integer,integer).

min(integer,integer,integer,integer).

 

CLAUSES

stop(1,18,2,12,3,10,8).

stop(2,12,3,11,5,13,5).

stop(3,15,2,18,3,14,4).

stop(4,16,4,20,5,13,5).

stop(5,17,2,14,3,12,6).

stop(6,14,3,17,1,11,7).

stop(7,13,2,19,4,10,5).

 

roadtime(Start,Finish,Time):-

Start<Finish,

stop(Start,TT,TW,BT,BW,TBT,TBW),

Trol=TT+TW,

Bus=BT+BW,

Trbus=TBT+TBW,

min(Trol,Bus,Trbus,Mintime),

Start1=Start+1,

roadtime(Start1,Finish,Time1),

Time=Time1+Mintime.

roadtime(Finish,Finish,0).

 

min(Trolley,Bus,Trolleybus,Mintime):-

Mintime=Trolley,

Trolley<=Bus,

Trolley<=Trolleybus,

write("On trolley ",Trolley),nl.

min(Trolley,Bus,Trolleybus,Mintime):-

Mintime=Bus,

Bus<=Trolley,

Bus<=Trolleybus,

write("On bus ",Bus),nl.

min(Trolley,Bus,Trolleybus,Mintime):-

Mintime=Trolleybus,

Trolleybus<=Bus,

Trolleybus<=Trolley,

write("On trolleybus ",Trolleybus),nl.

 

GOAL

roadtime(2,5,Time).

 

Пример работы программы





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.