著名的传教士和食人族问题如下所示:三个传教士和三个食人族在河的东岸,他们有一艘足以容纳最多两个人的小船。 对于任何一岸,如果传教士在场,则不能被食人族超过人数,因为食人族会吃掉传教士。 小船不能空载过河。如何使所有传教士和食人族都活着到达对岸?
我选择将状态表示为包含五个元素的列表。第一个元素表示东岸传教士的数量;第二个表示东岸食人族的数量;第三个表示西岸传教士的数量;第四个表示西岸食人族的数量;第五个表示小船的位置,可以是东或西。按照这种表示方法,初始状态将表示为(3 3 0 0 east)。
我的操作符是否正确? 或者说,是否有使用我的状态表示定义问题操作符的其他方式?
非常感谢您的任何见解!
我的问题操作符如下:
我选择将状态表示为包含五个元素的列表。第一个元素表示东岸传教士的数量;第二个表示东岸食人族的数量;第三个表示西岸传教士的数量;第四个表示西岸食人族的数量;第五个表示小船的位置,可以是东或西。按照这种表示方法,初始状态将表示为(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)
)