Задача: переставить мебель так, чтобы шкаф и кресло поменялись местами - Prolog

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Пытаюсь решить такую задачу: Площадь комнаты разделена на шесть прямоугольников, пять из них заняты мебелью, шестой - свободен. Переставить мебель так, чтобы шкаф и кресло поменялись местами, при этом никакие два предмета не могут размещаться одновременно на одном прямоугольнике. Нужно решить поиском в глубину, ширину и поиском с итерационным погружением. Начал делать через поиск в глубину:
Листинг программы
  1. prolong([X|T],[Y,X|T]) :- move(X,Y), not(member(Y,[X|T])).
  2. dseach([X|T],X,[X|T]).
  3. dseach(P,Y,L) :- prolong(P,P1), dseach(P1,Y,L).
Описал варианты перестановок:
Листинг программы
  1. move([n,B,C,D,E,F],[B,n,C,D,E,F]).
  2. move([n,B,C,D,E,F],[D,B,C,n,E,F]).
  3. move([A,n,C,D,E,F],[A,C,n,D,E,F]).
  4. move([A,n,C,D,E,F],[A,E,C,D,n,F]).
  5. move([A,B,n,D,E,F],[A,B,F,D,E,n]).
  6. move([A,B,C,n,E,F],[A,B,C,E,n,F]).
  7. move([A,B,C,D,n,F],[A,B,C,D,F,n]).
Сам запрос:
Листинг программы
  1. dpath(X,Y,P):- dsearch([stol,stul,shkaf,stul,n,kreslo],[stol,stul,kreslo,stul,n,shkaf],L),write(L).
Что нужно еще добавить, чтобы все заработало? Спасибо.

Решение задачи: «Задача: переставить мебель так, чтобы шкаф и кресло поменялись местами»

textual
Листинг программы
  1. reverse([H|T], A, R) :-
  2.     reverse(T, [H|A], R).
  3. reverse([], R, R).

Объяснение кода листинга программы

Код представляет собой реализацию функции reverse для списка. Функция reverse изменяет порядок элементов в списке на обратный. Вот список из 3 элементов с номерами:

  1. reverse([H|T], A, R) - здесь H это первый элемент списка, T это остаток списка, A это результат рекурсивного вызова функции reverse для списка T, а R это результат рекурсивного вызова функции reverse для списка [H|A].
  2. reverse([], R, R) - здесь [] это пустой список, R это результат рекурсивного вызова функции reverse для пустого списка, и R это результат рекурсивного вызова функции reverse для списка [H|A]. Код работает следующим образом:
  3. Если список пустой, то возвращается результат рекурсивного вызова функции reverse для пустого списка.
  4. Если список не пустой, то первый элемент списка помещается в начало нового списка, а остаток списка сокращается на один элемент. Затем рекурсивно вызывается функция reverse для нового списка. Результат рекурсивного вызова функции reverse для нового списка добавляется в конец нового списка.
  5. Результатом работы функции является список, в котором порядок элементов изменен на обратный.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы