我对Prolog很新,遇到了一个似乎很容易实现的逻辑谜语,但是在网上搜索了2天之后,我还是无法解决如何在Prolog中解决它的问题 .
三只青蛙和三只蟾蜍排列在下面的起始状态图中所示的配置中 . 青蛙在右边,蟾蜍在左边 . 通过一系列有效的两栖动作,你必须将状态转换为目标状态,如下图所示 .
但青蛙和蟾蜍只能按照以下规格移动:
-
一次只能移动一只两栖动物(即青蛙或蟾蜍) .
-
青蛙只能向左移动,而蟾蜍只能向右移动 .
-
每次移动都是以太网抓取或跳跃 .
-
爬行是移动到相邻的空白区域 .
-
跳跃是移动到距离起始空间两个空间的空白空间,这样跳跃的起点和终点之间的空间被另一个两栖动物占据 .
-
青蛙只能跳过蟾蜍,蟾蜍只能跳过青蛙 .
Edit
我想要实现的是青蛙和蟾蜍可以做的所有可能的动作,手动,我已经解决了这个问题,但我想实现它,以便程序在执行最少量的动作时解决它 .
这是我想要做的:
initial state: [frog1,frog2,frog3,gap,toad3,toad2,toad1]
transition_1:[frog1,frog2,gap,frog3,toad3,toad2,toad1] transition_2:[frog1,frog2,toad3,frog3,gap,toad2,toad1]
.
.
.
final state:: [toad3,toad2,toad1,gap,frog1,frog2,frog3]
1 回答
我用以下方式知道这个谜语 . 但我猜跳蛙/蟾蜍比跳骆驼更合理:
这是一个简单的解决方案,使用蛮力和骆驼成语,前者因为搜索空间没有循环而且是有限的:
似乎有两种解决方案:
家庭作业:更改上面的代码,以便显示一系列动作 .