猴子摘香蕉问题:

一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等)。设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下(设猴子位置为A,箱子位置为B,香蕉位置在C),如何行动可摘取到香蕉。

代码样例:

#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
};struct State States[150];
char* routesave[150];//monkey goto , monkey go to 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];States[i+1].monkey = -1;}else if(a == 0){routesave[i] = "Monkey go to C";States[i+1] = States[i];States[i+1].monkey = 0;}else if(a ==1){routesave[i] = "Monkey go to B";States[i+1] = States[i];States[i+1].monkey = 1;}else{printf("Wrong!");}
}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 C";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 B";States[i+1] = States[i];States[i+1].monkey = 1;States[i+1].box= 1;}else{printf("Wrong!");}
}void climbonto(int i)
{routesave[i] = "monkey climb onto box";States[i+1] = States[i];States[i+1].monbox = 1;
}void climbdown(int i)
{routesave[i] = "monkey climb down box";States[i+1] = States[i];States[i+1].monbox = -1;
}void reach(int i)
{routesave[i] = "monkey reach the banana";
}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");
}void nextStep(int i)
{int c;int j;if(i>=100){printf("step has reached 100,Wrong!");return;}for(c=0;c<i;c++){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("end");while(1)getchar();return;}j = j + 1;if(States[i].monkey==0){if(States[i].box == 0){if(States[i].monbox == -1){climbonto(i);reach(i+1);nextStep(j);}else{reach(i+1);nextStep(j);}}else if(States[i].box == 1){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);}}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);}}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);}}}int main()
{int q,p,k;printf(" -1:A, 1:B ,0:C,  enter the location of monkey , box, banana:\n"); scanf("%d%d%d",&q,&p,&k);States[0].monkey = q;States[0].box = p;States[0].banana = k;States[0].monbox = -1;nextStep(0);
}

人工智能猴子摘香蕉问题相关推荐

  1. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次.docx...

    人工智能课内实验报告(8次)学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题的VC编程实现--------1课内实验2:编程实现简单动 ...

  2. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -...

    人工智能课内实验报告 (8次) 学 院:自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号:06153034 目 录 课内实验1:猴子摘香蕉问题的VC编程实现????????1 课内 ...

  3. 用python语言实现人工智能猴子摘香蕉的问题_【提问】求大神看看代码哪里错了 C语言猴子摘香蕉...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include int W; /*W -猴子的水平位置 */ int x; /*x -当猴子在箱子顶上时取 x=1 ...

  4. 【SC应用】【人工智能】Java实现猴子摘香蕉,动画显示

    人工智能课程实验一的任务,写出猴子摘香蕉问题的知识表示,并用代码实现推理过程 问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一 ...

  5. 人工智能基础---上机1:猴子摘香蕉

    人工智能基础-上机1:猴子摘香蕉 一.题目 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图 1 所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再 ...

  6. 【C++】人工智能实验一 猴子摘香蕉/传教士与野人(含完整代码与状态迁移图)

    文章目录 一.猴子摘香蕉问题 1.问题描述 2.解题思路 3.实验结果及分析 实验结果一 实验结果二 实验结果三 4.实验结果 5.实验代码 二.传教士(牧师)与野人问题 1.问题描述 2.实验步骤 ...

  7. JAVA语言写的人工智能小实验——猴子摘香蕉

    背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...

  8. 猴子摘香蕉问题-人工智能模拟

    题目: 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图1所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上.请定义必要的谓词,列出问题的 ...

  9. 人工智能程序——猴子摘香蕉(C语言)

    问题说明: 房间内有一只猴子,一个箱子和一个挂在天花板上的香蕉.三者的位置如下图所示: 初始状态:三者在输入的初始位置,猴子手上无香蕉,猴子不在箱子上. 目标状态:三者均在香蕉对应的位置,猴子手上有香 ...

最新文章

  1. html判断对错,Html翻转校园试题
  2. 学习笔记------tag文件
  3. Python 如何计算当前时间减少或增加一个月
  4. linux中安装vsftpd出现的问题
  5. dao加service加mysql实例_SpringBoot项目整合mybatis的方法步骤与实例
  6. 谷歌io大会 android p,谷歌I/O大会发布全新电视系统 Android P让电视变的更加智能...
  7. 信息技术与计算机文化达标卷,初中信息技术试卷
  8. 有没有能够很快上手的报表框架
  9. Winform的菜单控件
  10. 程序员喜欢的5款最佳代码比较工具
  11. python任意进制转换_python 十进制转换成任意进制
  12. word自动图文集,制表位实现公式对齐,域代码,mathtype自动公式右编号
  13. JAVA自学之路 来自尚学堂马士兵老师
  14. 最新服务器处理器天梯,至强cpu天梯图2020_intel服务器cpu排行榜2020
  15. 人工智能--不确定性推理概述
  16. 2021届西农计算机复试工作方案(学院)
  17. 缠论中第49课:没必要参与操作级别及以上级别的下跌与超过操作级别的盘整,如何理解与应用?
  18. 腾讯2021校园招聘全球启动
  19. 朋友圈那个随便辞职的年轻人,后来活成了什么样?
  20. (有理数类 )创建一个名为Rational的类,进行分数运算。

热门文章

  1. [unix]指令大全
  2. 倩女幽魂显示服务器繁忙,倩女幽魂手游新服首开服务器爆满,万人排队逼疯玩家...
  3. VScode:编写Markdown和转换输出pdf格式
  4. video自动循环播放设置
  5. wordpress 外部数据接口_在WordPress中开发API接口
  6. .NET高性能编程 - C#如何安全、高效地玩转任何种类的内存之Memory(三)
  7. RobotFramework-SeleniumLibrary库缺少open brower、input等关键字
  8. release模式ftell崩溃
  9. 【博客置顶】个人简介
  10. JAVA截取字符串,只拿去某一字符第一次出现前的字符串