Контрольная работа: Программа выбора оптимального (наикратчайшего) маршрута перемещения в лабиринте
% нахождение следующей клетке в маршруте с переходом
маршрут (КлНачал, КлКонеч, [КлНачал, КлНачал2|Хвост], ВесМаршрута1, Линия, Недоступные, Обязательные, КолОбяз1):-
переход (КлНачал, Линия, Новая_Линия),
соседние (КлНачал, КлНачал2, Новая_Линия),
not (принадлежит (КлНачал2, Недоступные)),
маршрут (КлНачал2, КлКонеч, [КлНачал2|Хвост], ВесМаршрута2, Новая_Линия, [КлНачал2|Недоступные], Обязательные, КолОбяз1),
ВесМаршрута1 = ВесМаршрута2 + 1;
переход (КлНачал, Линия, Новая_Линия),
соседние (КлНачал, КлНачал2, Новая_Линия),
not (принадлежит (КлНачал2, Недоступные)),
принадлежит (КлНачал2, Обязательные),
КолОбяз2 = КолОбяз1 – 1,
маршрут (КлНачал2, КлКонеч, [КлНачал2|Хвост], ВесМаршрута2, Новая_Линия, [КлНачал2|Недоступные], Обязательные, КолОбяз2),
ВесМаршрута1 = ВесМаршрута2 + 1.
/* ВЫВОД МАРШРУТА */
% вывод последней клетки маршрута
write_маршрут([Клетка], Линия): – линия (Линия, Список),
принадлежит (Клетка, Список), write(Клетка).
% вывод клетки без перехода
write_маршрут([Клетка, Клетка2|Хвост], Линия):-
соседние (Клетка, Клетка2, Линия),
write (Клетка,» –»),
write_маршрут([Клетка2|Хвост], Линия).
% вывод клетки c переходом
write_маршрут([Клетка, Клетка2|Хвост], Линия):-
переход (Клетка, Линия, Новая_Линия),
соседние (Клетка, Клетка2, Новая_Линия),
write (Клетка,» –»),
write_маршрут([Клетка2|Хвост], Новая_Линия).