1 / 1 / 0
Регистрация: 27.10.2016
Сообщений: 18
1

Решение головоломок на Lisp

27.10.2016, 16:58. Показов 1057. Ответов 2
Метки нет (Все метки)

Помогите с решением следующей задачи. Используя рекурсии, на языке Lisp решить головоломку.
Есть восемь перенумерованных пней. На пнях 1 и 3 сидят кролики, на пнях 6 и 8 — белки. И белки, и кролики хотят обменяться пнями: белки желают сидеть на местах кроликов, а кролики — на местах белок. Попасть на новое место они
могут, прыгая с пня на пень по следующим правилам:
1. прыгать с пня на пень можно только по тем
линиям, которые показаны на рисунке; каждый зверек может делать несколько прыжков кряду;
2. два зверька на одном пне поместиться не могут, поэтому прыгать можно только на свободный пень.
Нужно найти минимальную последовательность прыжков, для достижения
цели.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2016, 16:58
Ответы с готовыми решениями:

LISP переделать решение
привет всем. нужна помощь. нужно переделать решение, использовать DO или PROG , рекурсией...

Решение выражения с Lisp
Здравствуйте,помогите пожалуйста с реализацией вот этого на языке Lisp: \sum_{i=1}^{n}...

Решение функции на LISP
Помогите решить задачу во вложении. Нужно вычичислить значение функции на LISP.

Решение логических задач на Lisp
Прошу помощи в следующей задаче. К реке подъехали 4 рыцаря с оруженосцами и обнаружили одну...

2
1 / 1 / 0
Регистрация: 27.10.2016
Сообщений: 18
28.10.2016, 20:59  [ТС] 2
И было бы желательно без использования flat, mapcar, lambda
0
1 / 1 / 0
Регистрация: 27.10.2016
Сообщений: 18
12.11.2016, 13:14  [ТС] 3
Решение головоломок на Lisp


Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(setq s '(1 3 6 8))
(setq te '((1 5) (1 7) (2 6) (2 8) (3 4) (3 7) (4 3) (4 8) (5 1) (5 6) (6 2) (6 5) (7 1) (7 3) (8 4) (8 2))) 
 
(defun temp(st tr)
    (labels
        ((appl(state tree n)
            (cond ((null state) nil)
            ((equal (car state) (car (car tree))) (append (list (car tree)) (appl state (cdr tree) (- n 1))))
            ((= n 0) (appl (cdr state) tr 2))
            (t (appl state (cdr tree) n))))
    )
    (appl st tr 2)
    )
)
 
(defun safe (state tree)
        (cond ((null tree) nil)
            ((not (null (member (car (last (car tree))) state))) (safe state (cdr tree)))
            (t (append (list (car tree)) (safe state (cdr tree))))
        )
)
 
(print (safe s (temp s te))) --->((1 5) (1 7) (3 4) (3 7) (6 2) (6 5) (8 4) (8 2))
Сначала мы задаем локальную переменную с исходным состоянием, и возможными путями с каждого пня.
Здесь функция temp ищет всевозможные ходы с пня 1 3 6 и 8 (т.е. первый шаг для всех), а функция safe исключает из полученного предыдущего списка пути заблокированные( т.е. если на них уже кто то сидит).
Мне нужна теперь помощь в создании функции, которая будет дальше высчитывать маршрут для всех животных.
Буду очень признателен за любую идею.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2016, 13:14

Решение логических задач на Lisp
Создаю повторно тему, с прошлой возникли какие-то технические трудности. Суть задачи в следующем:...

Решение формально-логической задачи на Lisp
Ребята помогите пожалуйста решить задачу на Lisp. Очень срочно, я вообще не программировала на...

ктонибудь расспешите пожалуйста на lisp как должно выглядть решение
Дан список из 10 целых чисел. Составить программу, вычисляющую произведение всех четных элементов...

Решение логических головоломок средствами Турбо-Пролога.
Кондратьев, Давыдов и Федоров живут на одной улице. Один из них - столяр, другой - маляр, третий -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.