【发布时间】:2019-08-30 15:04:16
【问题描述】:
著名的传教士和食人族问题如下:
三个传教士和三个食人者在一条河的东边。他们有一艘足够大的船,最多可以载两个人。对于这两家银行来说,如果银行里有传教士,他们的数量就不会被食人族所超越,因为食人族会吃掉传教士。没有人在船上,船不能自己过河。传教士和食人族怎么能活着到达彼岸?
我选择将状态表示为包含五个元素的列表。第一个元素代表东岸传教士的人数;第二个代表东岸食人族的数量;第三个代表西岸传教士的人数;第四个代表西岸食人族的数量;第五个代表船的位置,可以是东也可以是西。在这种表示下,初始状态将表示为 (3 3 0 0 east)。
我的操作符是否正确?还是有另一种方法(使用我的状态表示)来定义问题运算符?
任何见解将不胜感激!
我的问题算子如下:
(defparameter *operators*
'(boat-takes-missionary-east
boat-takes-cannibal-east
boat-takes-missionary-west
boat-takes-cannibal-west
boat-takes-missionary-missionary-east
boat-takes-missionary-cannibal-east
boat-takes-cannibal-cannibal-east
boat-takes-missionary-missionary-west
boat-takes-missionary-cannibal-west
boat-takes-cannibal-cannibal-West)
)
【问题讨论】:
标签: lisp common-lisp breadth-first-search