人工智能实验猴子摘香蕉_猴子拿香蕉实验感悟

人工智能实验猴子摘香蕉_猴子拿香蕉实验感悟题目意思:猴子定义了4个状态空手移动,推箱子,爬箱子,摘香蕉用(w,x,y,z)描述w定义了猴子位置x为1表示猴子在箱子上,0表示不在箱子上y表示箱子位置z为1表示猴子摘到香蕉(结束),为0表示没有摘到香蕉(继续搜索)目前仍有些bug随机生产猴子箱子香蕉的位置,通过BFS搜索并记录路径得出猴子的行走轨迹(因为是宽松搜,得到的就是最优解)#…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

 

题目意思:

猴子定义了4个状态  空手移动,推箱子,爬箱子,摘香蕉 用 (w,x,y,z)描述

w定义了猴子位置

x为1表示猴子在箱子上,0表示不在箱子上

y表示箱子位置

z为1表示猴子摘到香蕉(结束),为0表示没有摘到香蕉(继续搜索)

 

目前仍有些bug

随机生产 猴子 箱子 香蕉的位置,通过BFS搜索并记录路径得出猴子的行走轨迹(因为是宽松搜,得到的就是最优解)

#include<iostream>
#include<queue>
#include<algorithm>
#include<cstdlib>
#include<stdio.h>
#include<ctime>
#include<cstring>
#include<cmath>
#define INF 0x3f3f3f3f
#define MAX 100000
using namespace std;
int a,b,c;//a 猴子 b箱子 c香蕉
int dir[2][2] = {
  
  {0,-1},{0,1}};
struct Node{
    int w,x,y,z;
	int close;
};
int pa[MAX];
int end;
Node nodes[MAX];
int getDis(int x1, int x2){
    return abs(x2-x1);
}

void go(int w,int x, int y, int z)
    {
		if(x == 1 && z== 0){
            printf("猴子在%d位置爬上箱子\n",w);
        }
        else if(x == 1 && z == 1){
            //printf("猴子在位置%d爬上箱子\n",w);
            printf("猴子在%d位置摘到香蕉\n",w);
        }
        else if(x == 0 && y != w){
            printf("猴子空手到达%d位置\n",w);
        }
        else if(x == 0 && y == w){
            printf("猴子推箱子到达位置%d\n",w);
        }
    }
int step = 1;
void print(int e)
    {
        int w,x,y,z,close;
        if(pa[e] != -1){
            print(pa[e]);
            Node node = nodes[e];
            w = node.w;//猴子位置
            x = node.x;//是否在箱子上
            y = node.y;//箱子位置
            z = node.z;//是否摘到香蕉
            //printf("\t");
            printf("第%d步 :",step++);
            go(w,x,y,z);
        }
    }
void getBana()
    {
        int w,x,y,z;
        int head, tail;
        memset(pa,-1,sizeof(pa));
        head = tail = 0;
        printf("猴子,箱子,香蕉的初始位置分别为%d %d %d\n\n",a,b,c);
        if(a == b && b == c){
            printf("猴子在位置%d爬上箱子\n",a);
            printf("猴子在%d位置摘到香蕉\n",a);
            return ;
        }
    	if(b == c){//箱子初始位置与香蕉位置相同 不能往下走了

    		if(b > a){
    			while(a < b){
    				++a;
    				printf("猴子空手到达%d\n",a);
				}
			}
			else{
				while(a > b){
					--a;
					printf("猴子空手到达%d\n",a);
				}
			}
    		printf("猴子在位置%d爬上箱子\n",a);
            printf("猴子在%d位置摘到香蕉\n",a);
		}

        nodes[tail].w = a;
        nodes[tail].x = 0;
        nodes[tail].y = b;
        nodes[tail].z = 0;
        tail++;
        while(head < tail){
            Node node = nodes[head];
            w = node.w;//猴子位置
            x = node.x;//是否在箱子上
            y = node.y;//箱子位置
            z = node.z;//是否摘到香蕉
            //go(w,x,y,z);
            if(x == 1 && z == 1){
                end = head;
                break;
            }
            if(x == 1 && w == c){
            	pa[tail] = head;
                nodes[tail].w = w;
                nodes[tail].x = 1;
                nodes[tail].y = y;
                nodes[tail].z = 1;
                tail++;
            }
            if(x != 1){
                if(w == y){//不在箱子上 并且在同一位置
                    for(int i = 0; i < 2; ++i) {
                        int nw = w + dir[i][1];
                        if(nw < 0) continue;
                        if(w == y && getDis(c,nw) > getDis(c,w)) continue;
                        pa[tail] = head;
                        nodes[tail].w = nw;//往前推
                        nodes[tail].x = 0;
                        nodes[tail].y = nw;
                        nodes[tail].z = 0;
                        nodes[tail].close = 1;
                        tail++;
                        pa[tail] = head;
                        nodes[tail].w = nw;//上箱子尝试摘
                        nodes[tail].x = 1;
                        nodes[tail].y = nw;
                        nodes[tail].z = 0;
                        tail++;

                    }
                }
                if(w != y){//不在箱子上  不在同一位置
                    for(int i = 0; i < 2; ++i) {
                        int nw = w + dir[i][1];
                        if(nw < 0) continue;
                        pa[tail] = head;
                        nodes[tail].w = nw;//上箱子尝试摘
                        nodes[tail].x = 0;
                        nodes[tail].y = b;
                        nodes[tail].z = 0;
                        tail++;
                    }
                }
            }
            head++;
        }
//        printf("%d\n",end);
//        for(int i = 0; i < 20; ++i){
//        	printf("%d ",pa[i]);
//		}
        print(end);
    }


int main()
    {
        ios::sync_with_stdio(false);
        srand((unsigned)time(NULL));
        a = rand()%(10-0)+1;
        b = rand()%(10-0)+1;
        c = rand()%(10-0)+1;
       //	cin >> a >> b >> c;
        getBana();

        return 0;
    }

 

人工智能实验猴子摘香蕉_猴子拿香蕉实验感悟

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189256.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea 2021.4.3 永久激活码(破解版激活)

    idea 2021.4.3 永久激活码(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 火山图标记基因_火山地形图

    火山图标记基因_火山地形图现在很多文章会要求火山图中显示某一个基因名称,或者是某一些基因的名称,这时候我们应该怎么做呢?很多人会选择使用AI或者PS来做,在这里我介绍的是,如何用R绘制这样的图加载R包library(ggpubr)library(ggthemes)如果没有安装,可以使用下面的代码进行安装install.packages(‘ggthemes’)install.packages(‘ggpubr’)…

    2022年10月21日
  • c++学生管理系统源代码_学校运营管理系统

    c++学生管理系统源代码_学校运营管理系统C#学员管理系统C#学员管理系统是在控制台输出的项目,和OOP学员管理系统相似。①创建一个学员的实体类Student,实现其构造方法和封装:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;///<summary>///实体类///</sum…

  • java基础案例4-4学生和老师「建议收藏」

    java基础案例4-4学生和老师「建议收藏」packagecom.itheima;importjava.util.Scanner;abstractclassPerson{voidspeak(){}}classTeacherextendsPerson{privateStringname;voidsetName(Stringname){this.name=name;}StringgetName(){returnname;.

  • 基于Opencv快速实现人脸识别(完整版)

    基于Opencv快速实现人脸识别(完整版)上篇博客:https://blog.csdn.net/beyond9305/article/details/92844258严格来说标题是有误的,只是单纯地对人脸进行了检测,而并非识别,opencv内置了检测分类器和识别器,这二者还是有很大不同的。这次进一步地研究这一块的知识,来一波真正意义上的人脸识别,查询的资料可能有点过时,但基本思想是没有毛病的,对一些函数也进行了更新,保证了功能的正常实…

  • 高通骁龙430系列-MSM8937 ( Cortex-A53架构)「建议收藏」

    高通骁龙430系列-MSM8937 ( Cortex-A53架构)「建议收藏」核心板特性产品尺寸小,便于客户集成,减少产品体积;支持4GLTE超高速上网,单板兼容移动/联通/电信2G/3G/4G;丰富的接口配置,满足大多数客户需求;高通骁龙8937(高通骁龙430系列)产品首款核心板产品;产品单面布板,可有效降低产品厚度;产品质量稳定可靠;提高开发效率。客户系统架构无需从零开始;降低开发难度。客户重点放在应用方案开发上,不必关注无线网络方案;增强可维护性。通过核心板的更迭…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号