Контрольная работа: Программа выбора оптимального (наикратчайшего) маршрута перемещения в лабиринте
принадлежит (Элемент, [_|Хвост]): – принадлежит (Элемент, Хвост).
/* ПРОВЕРКА ДВУХ ЭЛЕМЕНТОВ НА ПОСЛЕДОВАТЕЛЬНОЕ РАСПОЛОЖЕНИЕ В СПИСКЕ */
посл (Элемент1, Элемент2, [Элемент1, Элемент2|_]).
посл (Элемент1, Элемент2, [_|Хвост]): – посл (Элемент1, Элемент2, Хвост).
/* ПРОВЕРКА: ЯВЛЯЮТСЯ ЛИ КЛЕТКИ СОСЕДНИМИ */
соседние (Клетка1, Клетка2, Линия):-
линия (Линия, Список),
принадлежит (Клетка1, Список), принадлежит (Клетка2, Список),
посл (Клетка1, Клетка2, Список);
линия (Линия, Список),
принадлежит (Клетка1, Список), принадлежит (Клетка2, Список),
посл (Клетка2, Клетка1, Список).
/* ПРОВЕРКА КЛЕТКИ НА ВОЗМОЖНОСТЬ СОВЕРШЕНИЯ ПЕРЕСАДКИ */
переход (Клетка, Линия1, Линия2): – линия (Линия1, Список1), линия (Линия2, Список2),
принадлежит (Клетка, Список1), принадлежит (Клетка, Список2),
Линия1<>Линия2.
/* ПОИСК МАРШРУТА */
маршрут (Клетка, Клетка, [Клетка], 1, Линия,_, Обязательные, КолОбяз): – линия (Линия, Список), принадлежит (Клетка, Список), КолОбяз=0.
% нахождение следующей клетки в маршруте без перехода
маршрут (КлНачал, КлКонеч, [КлНачал, КлНачал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),