猴子摘香蕉实验报告记录(含代码)

合集下载

猴子和香蕉的实验

猴子和香蕉的实验

猴子和香蕉的实验:猜测道德、阶级、信仰、宗教的起源-道德的起源-把五只猴子关在一个笼子里,上头有一串香蕉实验人员装了一个自动装置一旦侦测到有猴子要去拿香蕉,马上就会有水喷向笼子而这五只猴子都会一身湿首先有只猴子想去拿香蕉,当然,结果就是每只猴子都淋湿了之后每只猴子在几次的尝试后,发现莫不如此於是猴子们达到一个共识:不要去拿香蕉,以避免被水喷到后来实验人员把其中的一只猴子释放,换进去一只新猴子A这只猴子A看到香蕉,马上想要去拿结果,被其他四只猴子海K了一顿因为其他四只猴子认为猴子A会害他们被水淋到,所以制止他去拿香蕉A尝试了几次,虽被打的满头包,依然没有拿到香蕉当然,这五只猴子就没有被水喷到后来实验人员再把一只旧猴子释放,换上另外一只新猴子B这猴子B看到香蕉,也是迫不及待要去拿当然,一如刚才所发生的情形,其他四只猴子海K了B一顿特别的是,那只A猴子打的特别用力(这叫老兵欺负新兵,或是媳妇熬成婆 ^O^)B猴子试了几次总是被打的很惨,只好作罢后来慢慢的一只一只的,所有的旧猴子都换成新猴子了,大家都不敢去动那香蕉但是他们都不知道为什麽,只知道去动香蕉会被猴扁这就是道德的起源-阶级的起源-实验人员继续他们的实验,不过这一次他们改变了喷水装置一旦侦测到有猴子要去拿香蕉,马上就会有水喷向拿香蕉的猴子,而不是全体然后实验人员又把其中的一只猴子释放,换进去一只新猴子C不同以往的是猴子C特别的孔武有力当然猴子C看到香蕉,也马上想要去拿一如以前所发生的情形,其他四只猴子也想海K猴子C一顿不过他们错误估计了C的实力,所以结果是反被C海K了一顿于是猴子C拿到了香蕉,当然也被淋了个透湿C一边打着喷嚏一边吃着香蕉,美味但是也美中不足A、B、D、E没有香蕉吃却也比较快乐,毕竟没有被淋到嘛后来C发现只有拿香蕉的那个才会被淋到,他就要最弱小的A替他去拿A不想被K,只好每天拿香蕉然后被水淋B、D、E越发的快乐了起来,这就叫比上不足,比下有余嘛于是五只猴子有了三个阶级这下子阶级也随着道德的起源了-道德的沦丧-天变热了,笼子里的猴子们想冲凉却找不到地方。

猴子与香蕉:心理学实验中管理之道

猴子与香蕉:心理学实验中管理之道

猴子与香蕉:心理学实验中管理之道2009/5/19/08:15 来源:价值中国作者:于同辉心理学里有一个非常经典的试验:猴子和香蕉。

把五只猴子关在一个笼子里,笼子顶上挂一串香蕉,在笼子顶上同时安装了一个喷头,只要有猴子试图摘香蕉,喷头就会喷出水来。

因为猴子都喜欢吃香蕉,因此几乎所有的猴子都试图去摘香蕉,但是无一例外都会被喷头喷出的水淋得浑身湿透,结果过了一段时间后,似乎所有的猴子都明白了这个“道理”——只要试图摘香蕉就会被水淋,于是没有任何一只猴子去摘挂在笼子顶上的香蕉,尽管它们都非常喜欢吃。

后来,试验人员用一只新猴子(简称A猴子)换出原来的一只猴子,这只A猴子看到笼子顶上的香蕉,也和原来的猴子刚开始一样试图去摘,这时,所有原来的猴子都不约而同地冲上去把这只A猴子暴打一顿,以后只要这只A猴子想去摘,就会遭到其它猴子的暴打,如此经过一段时间,A猴子也和原来的猴子一样放弃了摘香蕉的企图。

试验人员又用另一只新猴子(简称B猴子)换出另一只原来的猴子,发生的情况与A猴子刚进来时一样,只要B猴子试图摘香蕉就会遭到暴打,而且A猴子打的最重。

就这样,经过很长一段时间后,原来的猴子都被换出去了,笼子里的猴子已经更换了几个轮回,顶上的喷头也已经早就取消了,但只要有新进来的猴子试图去摘香蕉都会遭到其它猴子的暴打,至于为什么会遭到暴打,没有一个猴子知道原因,但每个猴子都很自觉地养成了这样的习惯。

这个经典的实验应用到组织管理上至少可以引伸出三层意思:首先,组织实施的任何变革,开始时都是少数人试图改变多数人,阻力一般很大,当多数人认可和接受变革后,就变成了多数人去改变少数人,阻力要小很多。

因此,推行任何变革,都需要管理者的坚持。

其次,众所周知,猴子喜欢香蕉几乎是与生俱来的习惯,而上述实验中的实验者试图改变猴子吃香蕉的习惯,其难度可想而知,但实验者很聪明,他开始只改变五只猴子,当这五只猴子被改变后,又让这五只猴子去改变越来越多的猴子,那么这最初的五只猴子就像是五粒种子。

猴子摘香蕉实验报告

猴子摘香蕉实验报告

实验1:猴子摘香蕉问题的VC编程实现一、实验目的利用一阶谓词逻辑求解猴子摘香蕉问题并通过编程来实现二、编程环境本文主要编译环境是Windows 10 Visual Studio 2015 在Ubuntu 12.0 用gcc编译来演示问题的另外几种状态的解法三、问题描述房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。

请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。

四、解决方案1.定义描述环境状态的谓词。

AT(x,y):x在y处,个体域:xϵ{monkey, box,banana },yϵ{a,b,c};HAND(s):猴子手中拿着s,个体域:sϵ{box,banana};ONBOX(monkey):猴子在箱子上;2.使用谓词、连结词、量词来表示环境状态。

问题的初始状态可表示为:S o:A T(monkey,a)˄ ~HAND(s)˄AT(box,c) ˄ ~ONBOX(monkey) ˄AT(banana,b)要达到的目标状态为:S g:AT(box,b) ˄ ONBOX(monkey) ˄ HAND(banana)˄AT(monkey,b) ˄AT(banana,b)3.从初始状态到目标状态的转化, 猴子需要完成一系列操作, 定义操作类谓词表示其动作。

go(m,n):猴子从m走到n处,个体域:m,nϵ{a,b,c};movebox(m,n):猴子把箱子从m 处移动到n 处,个体域:m,n ϵ{a,b,c};onbox(m):猴子在m 处爬上箱子,个体域:m ϵ{a,b,c};catch(banana):猴子摘到香蕉;这3个操作也可分别用条件和动作来表示。

条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。

最新猴子和香蕉的实验

最新猴子和香蕉的实验

最新猴子和香蕉的实验一天,在大家冲凉时,饱受折磨的HERO闻到了香蕉的清香,生物本能使它在别的猴子心有旁鹜时将香蕉吃了。

而且此后没有了新的香蕉来填补空缺。

猴子们陷入了另一个尴尬境地:没有冲凉的水,也没有香蕉,只有HERO。

于是,另一个规则形成了。

猴子在烦躁的时候会痛打HERO出气,HERO不得反抗。

当笼子里的旧猴子被新猴子换掉时,新猴子会在最快的时间内学会殴打HERO。

终于有一天,老天有眼,历尽沧桑的HERO被另一只猴子代替了。

猴子们失去了发泄的对象,只能任意选取一个目标进行攻击。

从此以后,笼子里的猴子们不吃不喝不冲凉,唯一的举动就是打架。

这就是道德的沦丧。

-道德的重建-实验人员对猴子们的争斗不休感到不安。

为了重建道德秩序,他们决定继续供应香蕉。

一天,正在混战的猴子们发现头顶多了一串香蕉,它们其中的一个A不顾身上的剧痛,把香蕉摘了下来。

于是久违的甘露出现了,未曾尝过甜头的猴子们先是茫然失措,继而争先恐后的加入冲凉的行列。

香蕉反而被遗忘了。

当猴子B、C、D、E发现A在享受淋浴的同时还吃着美味的香蕉,嫉妒心使它们暂时团结起来,共同K了A一顿,将A吃剩的香蕉夺过来,但是,此刻的香蕉成了匹夫怀里的宝玉,得到它的猴子虽然可以享受美味,但付出的代价也是巨大的。

实验人员不断放入香蕉,却发现战斗比以前更激烈了。

分析清楚原因后,他们用木头做了一个假香蕉扔进了笼子。

此时猴子们已经学聪明了,它们知道触摸香蕉可以享淋浴,而试图独占香蕉则会遭到痛扁。

于是,一个新的现象出现了,当猴子们有冲凉的需要时,会有一只猴子将香蕉拿起来,而当它发现有遭到攻击的可能时,它会马上放下香蕉逃到一边去。

这样,猴子们都能冲凉,但是又不至于再象以前那样N败俱伤。

没有猴子发现那个香蕉是假的。

-信仰的起源-五只猴子A、B、C、D、E三个阶级快乐地生活了很久他们精确的给出了三个阶级的定义,即吃香阶级、拿香阶级和干看着阶级可惜猴子A由于长期的水中作业无可避免地引发了它肺部功能的衰竭一天他在例行的拿香蕉作业中跌倒了就再也没有爬起来于是实验人员又送进了一只同样孔武有力的猴F当然他还是对屋顶的香蕉很有兴趣不幸的是他最终以微弱的劣势被以C为首的群猴再次海K第二天,又到了拿香蕉的时候猴子C很无所谓,反正他还要吃香蕉,反正他不会被水淋到真正恐慌的是B、D、E三猴F是那么的健壮,他们这些媳妇是熬不成婆了他们将面临一个艰难的抉择,谁该去步A的后尘?猴子B、D、E展开了激烈的争论,讨论谁最应该做下一个拿香阶级猴子F很奇怪也很好奇,什么叫“拿香阶级”呢?猴子B、D、E解释道:所谓“拿香阶级”就是猴子界勇敢者的阶级需具备一不怕苦二不怕死的大无畏精神方能得此殊荣猴子F闻听不禁有些神往,有些跃跃欲试当然他最终达到了目的,作了唯一的拿香阶级再后来,B、D、E三猴陆续被换出局,换来的猴子个个健壮如C他们继续大大出手,不过目标不是香蕉,而是那个唯一的拿香阶级于是信仰也出现了。

python猴子摘香蕉心得

python猴子摘香蕉心得

python猴子摘香蕉心得在这个世界上,最有趣的动物之一就是猴子了。

它们聪明、机灵,有时甚至比人类更具创造力。

而今天,我要和大家分享的是一次和猴子一起摘香蕉的经历。

那天,我来到了一座美丽的热带雨林,在那里我遇到了一群顽皮的猴子。

它们跳来跳去,互相追逐着,仿佛在玩耍一般。

我被它们的活泼和机智所吸引,决定近距离观察它们的行为。

正当我静静地观察时,我注意到一只猴子离开了群体,身手敏捷地爬上了一棵高大的香蕉树。

我惊讶地发现,树上挂满了诱人的香蕉,而这只猴子似乎对此毫不在意。

它先是慢慢地靠近香蕉,仔细观察着。

然后,它突然从身上拿出一根长长的棍子,用它轻轻地敲打着香蕉。

我想,它是想通过这种方式来摘下香蕉吧。

然而,很不幸的是,那根棍子太短了,根本够不到香蕉。

猴子看起来有些沮丧,但它并没有放弃。

它继续寻找着其他的方法。

接着,猴子眼中闪过一丝灵光,它开始四处搜寻。

终于,在一旁的灌木丛中,它找到了一根更长的棍子。

它高兴地拿起棍子,再次靠近香蕉树。

这次,猴子的计划成功了。

它巧妙地使用棍子,将香蕉一根一根地摘下来。

每当一根香蕉落地,它都会开心地叫着,仿佛在向全世界宣告它的胜利。

这个过程让我深深地感受到了猴子的智慧和努力。

它们并没有因为遇到困难而放弃,而是不断地寻找解决问题的办法。

它们的聪明才智和创造力令人敬佩。

通过这次与猴子一起摘香蕉的经历,我深刻地认识到了努力和智慧的重要性。

无论在什么样的环境下,只要我们保持积极的态度,不断地寻找解决问题的方法,就一定能够战胜困难,实现自己的目标。

香蕉树上的香蕉象征着人生中的目标和梦想。

只有像猴子一样,不畏艰难,不怕失败,我们才能够摘取到属于自己的果实。

所以,让我们像猴子一样,勇敢地去追逐我们的梦想吧!。

猴子摘香蕉问题acb箱子

猴子摘香蕉问题acb箱子
状态空间表示举例
实例: 猴子摘香蕉问题
箱子
a
c
b

目 标 状 态
箱子
aLeabharlann cb实例: 猴子摘香蕉问题
问题状态的表示:四元组(W,x,Y,z) W:猴子的水平位置。W=a,b,c。 x:当猴子在箱子顶上时取x=1;否则取
x=0。 Y:箱子的水平位置。Y=a,b,c。 z:当猴子摘到香蕉时取z=1;否则取z=0。
初始状态:(a,0,b,0) 目标状态:(c,1,c,1)
算符集合:
goto(U):猴子走到水平位置U。
(W,0,Y,z) goto(U) (U,0,Y,z)
pushbox(V):猴子把箱子推到水平位置V。
(W,0,W,z) pushbox(V) (V,0,V,z)
climbbox:猴子爬上箱顶。
思考题
设有3个传教士和3个野人来到河边, 打算乘一只船从右岸渡到左岸去。该船的 负载能力为两人。在任何时候,如果野人 人数超过传教士人数,那么野人就会把传 教士吃掉。他们怎样才能用这条船安全地 把所有人都渡过河去?
(W,0,W,z) climbbox (W,1,W,z)
grasp:猴子摘到香蕉。
(c,1,c,0) grasp (c,1,c,1)
算符的适用性条件:强加于操作的实用性条件。
如:应用算符pushbox(V)时,要求猴子与箱子必须 在同一位置。
猴子摘香蕉问题的状态空间图如下图所示。 操作序列:{goto(b),pushbox(c),climbbox,grasp}

猴子与香蕉的实验

猴子与香蕉的实验
:猴子与香蕉的实验
然后,再放一只新猴子进笼子内 新猴子进到笼子后,见到香蕉,本能去拿 其它猴子马上把新猴子按住,一通爆打 几次反复下来,新猴子尽管不明究理,但很快也明白了香 蕉不能动,一动就会触犯众怒 这样,猴子们“不能动香蕉”的默契建立起来了 ---------
“不能动香蕉”的文化形成了
在冬天把一群猴子关在一个笼里笼子上方安装一个洒水的花洒花洒的开关拉手绑着一个香蕉刚进笼的猴子见到香蕉本能会去拿香蕉结果拉动开关花洒撒出冷水把笼里的猴子浇大冬天身体被淋湿的滋味不好受一来二去猴子们明白这个香蕉不能动一动就会受到浇冷水的惩罚即使偶尔还有个别猴子贼心不死想去拿香蕉别的猴子也会去制止它的行为免得大家被个别猴子的行为遭罪文化的建立
文化的建立: 文化的建立:猴子与香蕉的实验
管理学上做过一个实验: 管理学上做过一个实验
在冬天把一群猴子关在一个笼里 笼子上方安装一个洒水的花洒 花洒的开关拉手绑着一个香蕉 刚进笼的猴子见到香蕉,本能会去拿香蕉 结果拉动开关,花洒撒出冷水,把笼里的猴子浇 湿 大冬天身体被淋湿的滋味不好受,一来二去,猴 子们明白这个香蕉不能动,一动就会受到浇冷水的 惩罚 即使偶尔还有个别猴子“贼心不死”想去拿香蕉, 别的猴子也会去制止它的行为,免得大家被个别猴 子的行为遭罪

猴子和香蕉的故事(关于道德、阶级、信仰迷信的实验)

猴子和香蕉的故事(关于道德、阶级、信仰迷信的实验)

猴子和香蕉‎的故事(关‎于道德、阶‎级、信仰&‎迷信的实验‎)-道‎德的起源-‎把五只‎猴子关在一‎个笼子里,‎上头有一串‎香蕉实验人‎员装了一个‎自动装置‎一旦侦测到‎有猴子要去‎拿香蕉,马‎上就会有水‎喷向笼子而‎这五只猴子‎都会一身湿‎首先有只‎猴子想去拿‎香蕉,当然‎,结果就是‎每只猴子都‎淋湿了之‎後每只猴子‎在几次的尝‎试後,发现‎莫不如此‎於是猴子们‎达到一个共‎识:不要去‎拿香蕉,以‎避免被水喷‎到後来实‎验人员把其‎中的一只猴‎子释放,换‎进去一只新‎猴子A 这‎只猴子A看‎到香蕉,马‎上想要去拿‎结果,被‎其他四只猴‎子海K了一‎顿因为其‎他四只猴子‎认为猴子A‎会害他们被‎水淋到,所‎以制止他去‎拿香蕉 A‎尝试了几次‎,虽被打的‎满头包,依‎然没有拿到‎香蕉当然‎,这五只猴‎子就没有被‎水喷到後‎来实验人员‎再把一只旧‎猴子释放,‎换上另外一‎只新猴子B‎这猴子B‎看到香蕉,‎也是迫不及‎待要去拿‎当然,一如‎刚才所发生‎的情形,其‎他四只猴子‎海K了B一‎顿特别的‎是,那只A‎猴子打的特‎别用力(这‎叫老兵欺负‎新兵,或是‎媳妇熬成婆‎^O^)‎B猴子试‎了几次总是‎被打的很惨‎,只好作罢‎後来慢慢‎的一只一只‎的,所有的‎旧猴子都换‎成新猴子了‎,大家都不‎敢去动那香‎蕉但是他‎们都不知道‎为什麽,只‎知道去动香‎蕉会被猴扁‎这就是道‎德的起源‎-迷信的‎起源-‎迷信的起源‎后来A‎终于被好心‎的实验人员‎拉出了苦海‎。

新来‎了猴子F ‎C觉得有‎必要维护自‎己的阶级地‎位,B、D‎、E则生怕‎自己顶了A‎的缸…… ‎在各种复杂‎心情的作用‎下,B、D‎、E在C的‎带领下爆扁‎了F一顿,‎然后强令‎F做拿香蕉‎阶级。

‎F开始不乐‎意,后来慢‎慢在B等的‎劝说下等“‎待多年的媳‎妇熬成婆”‎这一宿命‎。

慢慢‎的老资格的‎B、D、E‎猴子渐渐被‎淘汰,C发‎现自己在体‎力上不再占‎有优势,‎很难再通过‎武力让这一‎游戏规则继‎续下去,觉‎得十分苦恼‎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

猴子摘香蕉实验报告记录(含代码)————————————————————————————————作者:————————————————————————————————日期:华中科技大学《人工智能与模式识别》实验报告院系:电子与信息工程系班级:姓名:同组人:指导老师:电话:邮箱:日期:2013年12月24日一、实验内容利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。

请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。

(附加:从初始状态到目标状态的谓词演算过程。

)二、实验平台VC6.0三、实验分析1. 定义描述环境状态的谓词。

AT(x,w):x在t处,个体域:xϵ{monkey},wϵ{a,b,c,box};HOLD(x,t):x手中拿着t,个体域:tϵ{box,banana};EMPTY(x):x手中是空的;ON(t,y):t在y处,个体域:yϵ{b,c,ceiling};CLEAR(y):y上是空的;BOX(u):u是箱子,个体域:uϵ{box};BANANA(v):v是香蕉,个体域:vϵ{banana};2. 使用谓词、连结词、量词来表示环境状态。

问题的初始状态可表示为:S o:AT(monkey,a)˄EMPTY(monkey)˄ON(box,c)˄ON(banana,ceiling)˄CLEAR(b)˄BOX(box)˄BANANA(banana)要达到的目标状态为:S g:AT(monkey,box)˄HOLD(monkey,banana)˄ON(box,b)˄CLEAR(ceiling)˄CLEAR(c)˄BOX(box)˄BANANA(banana)3. 从初始状态到目标状态的转化, 猴子需要完成一系列操作, 定义操作类谓词表示其动作。

WALK(m,n):猴子从m 走到n 处,个体域:m,n ϵ{a,b,c};CARRY(s,r):猴子在r 处拿到s ,个体域:r ϵ{c,ceiling},s ϵ{box,banana};CLIMB(u,b):猴子在b 处爬上u ;这3个操作也可分别用条件和动作来表示。

条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。

动作通过前后状态的变化表示,即通过从动作前删除或增加谓词公式来描述动作后的状态。

WALK(m,n):猴子从m 走到n 处条件:AT(monkey,m)动作:⎩⎨⎧),(),(n monkey AT m monkey AT 增加:删除: CARRY(s,r):猴子在r 处拿到s条件:AT(monkey,r)˄EMPTY(monkey)˄ON(s,r)˄BOX(box)˄BANANA(banana)动作:⎩⎨⎧∧∧)(),(),()(r CLEAR s monkey HOLD r s ON monkey EMPTY 增加:删除: CLIMB(u,b):猴子在b 处爬上u条件:AT(monkey,b)˄HOLD(monkey,u)˄CLEAR(b)˄BOX(box)˄BANANA(banana)动作:⎩⎨⎧∧∧∧),()(),()(),(),(c u ON monkey EMPTY u monkey AT c CLEAR u monkey HOLD b monkey AT 增加:删除: 4. 按照行动计划, 一步步进行状态替换, 直至目标状态。

AT(monkey,a)˄EMPTY(monkey)˄ON(box,c)˄ON(banana,ceiling)˄CLEAR(b)˄BOX(box)˄BANANA(banana)n c m a c a WALK 代换用代换用,),(⇓AT(monkey,c)˄EMPTY(monkey)˄ON(box,c)˄ON(banana,ceiling)˄CLEAR(b)˄BOX(box)˄BANANA(banana)r box s c box c CARRY 代换用代换用,),(⇓AT(monkey,c)˄HOLD(monkey,box)˄ON(banana,ceiling)˄CLEAR(b)˄CLEAR(c)˄BOX(box)˄BANANA(banana)n b m c b c WALK 代换用代换用,),(⇓AT(monkey,b)˄HOLD(monkey,box)˄ON(banana,ceiling)˄CLEAR(b)˄CLEAR(c)˄BOX(box)˄BANANA(banana))(⇓用,boxbuCLIMB代换boxAT(monkey,box)˄EMPTY(monkey)˄ON(box,b)˄ON(banana,ceiling)˄CLEAR(c)˄BOX(box)˄BANANA(banana)用,代换),(用⇓ceilingrsbananabananaceilingCARRY代换AT(monkey,box)˄HOLD(monkey,banana)˄ON(box,b)˄CLEAR(ceiling)˄CLEAR(c)˄BOX(box)˄BANANA(banana)(目标得解)猴子行动的规则序列是:WALK(a,c)→CARRY(c,box)→WALK(c,b)→CLIMB(box,b)→CARRY(banana,ceiling)在上述过程中,我们应该注意,当猴子执行某一个操作之前,需要检查当前状态是否可使所要求的条件得到满足,即证明当前状态是否蕴涵操作所要求的状态的过程。

在行动过程中,检查条件的满足性后才进行变量的代换。

代入新条件后的新状态如果是目标状态,则问题解决;否则看是否满足下面的操作,如果不满足或即使满足却又回到了原来的状态,那么代入无效。

四、源代码#include <stdio.h>struct State{int monkey; /*-1:Monkey at A;0: Monkey at B;1:Monkey at C;*/int box; /*-1:box at A;0:box at B;1:box at C;*/int banana; /*Banana at B,Banana=0*/int monbox; /*-1: monkey on the box;1: monkey the box;*/};struct State States [150];char* routesave[150];/*function monkeygoto,it makes the monkey goto the other place*/void monkeygoto(int b,int i){int a;a=b;if (a==-1){routesave[i]="Monkey go to A";States[i+1]=States[i];}else if(a==0){routesave[i]="Monkey go to B";States[i+1]=States[i];States[i+1].monkey=0;}else if(a==1){routesave[i]="Monkey go to C";States[i+1]=States[i];States[i+1].monkey=1;}else{printf("parameter is wrong");}}/*end function monkeyygoto*//*function movebox,the monkey move the box to the other place*/ void movebox(int a,int i){int B;B=a;if(B==-1){routesave[i]="monkey move box to A";States[i+1]=States[i];States[i+1].monkey=-1;States[i+1].box=-1;}else if(B==0){routesave[i] = "monkey move box to B";States[i+1]=States[i];States[i+1].monkey=0;States[i+1].box=0;}else if(B==1){routesave[i] = "monkey move box to C";States[i+1]=States[i];States[i+1].box=1;}else{printf("parameter is wrong");}}/*end function movebox*//*function climbonto,the monkey climb onto the box*/void climbonto(int i){routesave[i]="Monkey climb onto the box";States[i+1]=States[i];States[i+1].monbox=1;}/*function climbdown,monkey climb down from the box*/void climbdown(int i){routesave[i]="Monkey climb down from the box";States[i+1]=States[i];States[i+1].monbox=-1;}/*function reach,if the monkey,box,and banana are at the same place,the monkey reach banana*/ void reach(int i){routesave[i]="Monkey reach the banana";}/*output the solution to the problem*/void showSolution(int i){int c;printf ("%s \n", "Result to problem:");for(c=0; c<i+1; c++){printf ("Step %d : %s \n",c+1,routesave[c]);}printf("\n");}/*perform next step*/void nextStep(int i){int c;int j;if(i>=150){printf("%s \n", "steplength reached 150,have problem ");return;}for (c=0; c<i; c++) /*if the current state is same to previous,retrospect*/{if(States[c].monkey==States[i].monkey&&States[c].box==States[i].box&&States[c].banana==States[i].banana&& States[c].monbox==States[i].monbox){return;}}if(States[i].monbox==1&&States[i].monkey==0&&States[i].banana==0&&States[i].box==0){showSolution(i);printf("Press any key to continue \n");getchar();/*to save screen for user,press any key to continue*/return;}j=i+1;if(States[i].monkey==0){if(States[i].box==0){if(States[i].monbox==-1){climbonto(i);reach(i+1);nextStep(j);/*monkeygoto(-1,i);nextStep(j);monkeygoto(0,i);nextStep(j);movebox(-1,i);nextStep(j);movebox(0,i);nextStep(j);*/}else{reach(i+1);nextStep(j);/*climbdown(i);nextStep(j);*/}}else if(States[i].box==1){/*monkeygoto(-1,i);nextStep(j);*/monkeygoto(1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else /*box==-1*/{monkeygoto(-1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}/*end if*/if(States[i].monkey==-1){if(States[i].box==-1){if(States[i].monbox==-1){movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{climbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}else if(States[i].box==0){monkeygoto(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{monkeygoto(1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}/*end if*/if(States[i].monkey==1){if (States[i].box==1){if(States[i].monbox==-1){movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{climbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}else if(States[i].box==-1){monkeygoto(-1,i);nextStep(j);movebox(0,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{monkeygoto(0,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}/*end if*/}/*end nextStep*/int main(){States[0].monkey=-1;States[0].box=1;States[0].banana=0;States[0].monbox=-1;nextStep(0);}五、实验截图。

相关文档
最新文档