Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
TSed
20 / 20 / 15
Регистрация: 22.01.2013
Сообщений: 76
1

Перевезти через реку волка, козу и капусту

07.11.2013, 02:17. Просмотров 2319. Ответов 1
Метки нет (Все метки)

Здравствуйте.
Требуется задача на Turbo Prolog:
Крестьянину нужно перевезти через реку волка, козу и капусту. На реке есть лодка, на которой может поместиться только крестьянин и волк, или крестьянин и коза, или крестьянин и капуста. В то время пока крестьянин перевозит в лодке один из своих товаров, остальные два ждут его на берегах. Волка и козу нельзя оставлять на одном берегу без присмотра человека, потому что волк съест козу. Так же нельзя оставлять козу наедине с капустой. Указать последовательность действий, которая позволит крестьянину переправить всех троих невредимыми.

Заранее спасибо !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 02:17
Ответы с готовыми решениями:

Объясните задачу про волка, козу и капусту
Здравствуйте! Я прошу у Вас помощи, на SWI Prolog нашла решение задачи про...

Переплыть через реку
Задание в Strawberry Prolog: четырем мужьям и их женам необходимо переплыть...

Крестьянин должен переправиться сам и перевезти волка, козу и капусту на другой берег
Ребята пожалуйста,вообще не пойму что и как сделать((( На берегу реки стоит...

Решить задачу про волка, козу и капусту
Преподаватель поставил задачу решить задачу про волка, козу и капусту, как не...

Нужно переправить через реку
Здравствуйте уважаемые форумчане, помогите пожалуйста решить задачу, искала на...

1
keidin
97 / 97 / 14
Регистрация: 07.02.2013
Сообщений: 128
07.11.2013, 23:21 2
Логика решения данной задачи подробно описана в главе "Методы поиска" книги "Искусство программирования на языке Пролог" Стерлинг, Шапиро. Почитайте.
Полный код для Turbo Prolog 2.0:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
domains
 
slist=string*
state=wgc(string, slist, slist)
history=state*
moves=string*
 
predicates
 
solve_dfs(state, history, moves)
initial_state(state)
final_state(state)
move(state, string)
member(string, slist)
member1(state, history)
update(state, string, state)
update_boat(string, string)
update_bank(string, string, slist, slist, slist,slist)
select(string, slist, slist)
insert(string, slist, slist)
precedes(string, string)
legal(state)
illegal(slist)
test
 
 clauses
 
test:-initial_state(State),
 
solve_dfs(State, [State], Moves), write(Moves). 
solve_dfs(State, _, [])if final_state(State). 
solve_dfs(State, History, [Move|Moves]):- move(State, Move), update(State, Move, State1), legal(State1), not (member1(State1, History)), 
solve_dfs(State1, [State1|History], Moves). 
 
initial_state(wgc(left, [wolf, goat, cabbage], [])).
 
final_state(wgc(right, [], [wolf, goat, cabbage])). 
 
move(wgc(left, L, _), Cargo)if member(Cargo, L).
move(wgc(right, _, R), Cargo)if member(Cargo, R).
move(wgc(_, _, _), alone). 
 
update(wgc(B, L, R), Cargo, wgc(B1, L1, R1)) :- update_boat(B, B1), update_bank(Cargo, B, L, R, L1, R1). 
update_boat(left, right).
update_boat(right, left).
 
update_bank(alone, _, L, R, L, R).
update_bank(Cargo, left, L, R, L1, R1):- select(Cargo, L, L1), insert(Cargo, R, R1). 
update_bank(Cargo, right, L, R, L1, R1):- select(Cargo, R, R1), insert(Cargo, L, L1). 
 
insert(X, [Y|Ys], [X,Y|Ys]):- precedes(X, Y). 
insert(X, [Y|Ys], [Y|Zs]):- precedes(Y, X), insert(X, Ys, Zs). 
insert(X, [], [X]).
 
precedes(wolf, _).
precedes(_, cabbage).
 
legal(wgc(left, _, R)):- not(illegal(R)).
legal(wgc(right, L, _)):- not(illegal(L)). 
 
illegal(L):- member(wolf, L), member(goat, L). 
illegal(L):- member(goat, L), member(cabbage, L). 
 
select(X, [X|Xs], Xs). 
select(X, [Y|Ys], [Y|Zs]):- select(X, Ys, Zs). 
 
member(X, [X|_]). 
member(X, [_|Ys]):- member(X, Ys). 
 
member1(X, [X|_]). 
member1(X, [_|Ys]):- member1(X, Ys).
          
goal
test.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 23:21

Переправить семью через реку
Здравствуйте дорогие друзья. У меня возникла проблема, нужно создать алгоритм...

Через какое время катер пересечет реку
Катер пересекает реку шириной b=360м, текущую со скоростью v1=2 м/с. Рулевой...

Задача: переправить через реку семью и полицейского с заключенным
Здравствуйте! Необходимо написать программу на языке C/C++ решения следующей...


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

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

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