Задача: переставить мебель так, чтобы шкаф и кресло поменялись местами - Prolog
Формулировка задачи:
Здравствуйте! Пытаюсь решить такую задачу:
Площадь комнаты разделена на шесть прямоугольников, пять из них заняты мебелью, шестой - свободен. Переставить мебель так, чтобы шкаф и кресло поменялись местами, при этом никакие два предмета не могут размещаться одновременно на одном прямоугольнике.
Нужно решить поиском в глубину, ширину и поиском с итерационным погружением.
Начал делать через поиск в глубину:
Описал варианты перестановок:
Сам запрос:
Что нужно еще добавить, чтобы все заработало?
Спасибо.
Решение задачи: «Задача: переставить мебель так, чтобы шкаф и кресло поменялись местами»
textual
Листинг программы
reverse([H|T], A, R) :- reverse(T, [H|A], R). reverse([], R, R).
Объяснение кода листинга программы
Код представляет собой реализацию функции reverse для списка. Функция reverse изменяет порядок элементов в списке на обратный. Вот список из 3 элементов с номерами:
reverse([H|T], A, R)- здесьHэто первый элемент списка,Tэто остаток списка,Aэто результат рекурсивного вызова функции reverse для спискаT, аRэто результат рекурсивного вызова функции reverse для списка[H|A].reverse([], R, R)- здесь[]это пустой список,Rэто результат рекурсивного вызова функции reverse для пустого списка, иRэто результат рекурсивного вызова функции reverse для списка[H|A]. Код работает следующим образом:- Если список пустой, то возвращается результат рекурсивного вызова функции reverse для пустого списка.
- Если список не пустой, то первый элемент списка помещается в начало нового списка, а остаток списка сокращается на один элемент. Затем рекурсивно вызывается функция reverse для нового списка. Результат рекурсивного вызова функции reverse для нового списка добавляется в конец нового списка.
- Результатом работы функции является список, в котором порядок элементов изменен на обратный.