Задача: переставить мебель так, чтобы шкаф и кресло поменялись местами - Prolog
Формулировка задачи:
Здравствуйте! Пытаюсь решить такую задачу:
Площадь комнаты разделена на шесть прямоугольников, пять из них заняты мебелью, шестой - свободен. Переставить мебель так, чтобы шкаф и кресло поменялись местами, при этом никакие два предмета не могут размещаться одновременно на одном прямоугольнике.
Нужно решить поиском в глубину, ширину и поиском с итерационным погружением.
Начал делать через поиск в глубину:
Описал варианты перестановок:
Сам запрос:
Что нужно еще добавить, чтобы все заработало?
Спасибо.
Листинг программы
- prolong([X|T],[Y,X|T]) :- move(X,Y), not(member(Y,[X|T])).
- dseach([X|T],X,[X|T]).
- dseach(P,Y,L) :- prolong(P,P1), dseach(P1,Y,L).
Листинг программы
- move([n,B,C,D,E,F],[B,n,C,D,E,F]).
- move([n,B,C,D,E,F],[D,B,C,n,E,F]).
- move([A,n,C,D,E,F],[A,C,n,D,E,F]).
- move([A,n,C,D,E,F],[A,E,C,D,n,F]).
- move([A,B,n,D,E,F],[A,B,F,D,E,n]).
- move([A,B,C,n,E,F],[A,B,C,E,n,F]).
- move([A,B,C,D,n,F],[A,B,C,D,F,n]).
Листинг программы
- dpath(X,Y,P):- dsearch([stol,stul,shkaf,stul,n,kreslo],[stol,stul,kreslo,stul,n,shkaf],L),write(L).
Решение задачи: «Задача: переставить мебель так, чтобы шкаф и кресло поменялись местами»
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 для нового списка добавляется в конец нового списка.
- Результатом работы функции является список, в котором порядок элементов изменен на обратный.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д