老鼠出迷宫

news/2024/5/19 12:04:40/文章来源:https://blog.csdn.net/WINorYU/article/details/126906473

老鼠出迷宫

现有一个图形如下:
在这里插入图片描述
要求老鼠在左边第一个位置,走到绿色标的出口橙色为边界不能走。
表盘可以看做是一个[8][7]大小的二维数组,可以用1表示边界,0表示可以走

int [][] arrMap = new int[8][7];

得到一个数组:
在这里插入图片描述
由于地图是有边界的也就是:
arrMap[0][0-6]和arrMap[7][0-6]上下要变成1
arrMap[0-7][0]和arrMap[0-7][6]左右也要要变成1
另外还有特殊的arr[3][1-2]也要变成1

int [][] arrMap = new int[8][7];for(int i = 0; i<arrMap.length;i++){for (int j = 0;j<arrMap[i].length ;j++ ) {arrMap[0][j] = 1;//最上arrMap[7][j] = 1;//最下arrMap[i][0] = 1;//最左arrMap[i][6] = 1;//最右arrMap[3][1] = 1;//特殊的arrMap[3][2] = 1;//特殊的System.out.print(arrMap[i][j]+" ");}System.out.println();}

得到
在这里插入图片描述
地图就制作好了,那么想要老鼠走到出口,也就是从数组[1][1]的位置走到[6][5]的位置
所以在走之前需要制定一下规则:
数字 1 代表不能走
数字 0 代表可以走,但是还没走
数字 2 代表走过的路
数字 3 代表走过,但是是死胡同(即上下左右都是1)
根据以上规则,可以得出一下结论
初始位置在【1】【1】
出口位置在【6】【5】
那么我们需要将走过的路变成数字 2 ,并且判断【6】【5】等于2的时候代表已经走出来了,返回true
如果不是等于2,那么就判断脚下的位置(下一步)是不是0,如果可以走那么就把他变成2,也就是走过的路

public boolean outMaze(int [][]map,int i,int j){if (map[i][j] == 2) {return true;}else{if (map[i][j] == 0) {map[i][j] = 2;}}}

怎么成功已经写出来了,还需要写出怎么走(难度重点)
首先我们安排,每次走的时候,是按照 下-右-上-左的顺序。
上面有判断如果是可以走的就变成2,那么如果不可以走的话,我们就按照计划的步骤,尝试计划的(-右-上-左)是不是0可以不可以走,如果可以那么就把下一步的位置变成2,如果不可以就继续下一个(-上-左)可以可以走,当上下左右都不是0时就把他变成数字 3 并且返回flase走到死胡同失败了。
当下-右-上-左只要有一个可以走,就接着下一个也按照下-右-上-左的顺序接着走,使用递归直至走到出口,或者走到死胡同。

if (map[i][j] == 2) {return true;}else{if (map[i][j] == 0) {map[i][j] = 2;if (outMaze(map,i+1,j)) {//看看下边能不能走return true;}else if(outMaze(map,i,j+1)){//看看右边能不能走return true;}else if(outMaze(map,i-1,j)){//看看上边能不能走return true;}else if(outMaze(map,i,j-1)){//看看左边能不能走return true;}else{//当上下左右都走不通,就是走到死胡同了,游戏失败map[i][j] = 3;return false;}}else{return false;}}

至此老鼠出迷宫的方法写完,传入实参数组看看走出的效果:
在这里插入图片描述

完整代码

public class Migong{public static void main(String[] args) {int [][] arrMap = new int[8][7];for(int i = 0; i<arrMap.length;i++){for (int j = 0;j<arrMap[i].length ;j++ ) {arrMap[0][j] = 1;//最上arrMap[7][j] = 1;//最下arrMap[i][0] = 1;//最左arrMap[i][6] = 1;//最右arrMap[3][1] = 1;//特殊的arrMap[3][2] = 1;//特殊的}}T t = new T();t.outMaze(arrMap,1,1);for(int y = 0; y<arrMap.length;y++){for (int u = 0;u<arrMap[y].length ;u++ ) {System.out.print(arrMap[y][u]+" ");}System.out.println();}}
}
class T {public boolean outMaze(int [][]map,int i,int j){if (map[i][j] == 2) {return true;}else{if (map[i][j] == 0) {map[i][j] = 2;if (outMaze(map,i+1,j)) {//看看下边能不能走return true;}else if(outMaze(map,i,j+1)){//看看右边能不能走return true;}else if(outMaze(map,i-1,j)){//看看上边能不能走return true;}else if(outMaze(map,i,j-1)){//看看左边能不能走return true;}else{//当上下左右都走不通,就是走到死胡同了,游戏失败map[i][j] = 3;return false;}}else{return false;}}	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9342.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python——基础语法(模块、包、文件读写等操作)

一、模块 概述&#xff1a;一个模块就是一个扩展名为.py的文件&#xff0c;可以包含多个函数、类、语句&#xff1b;使用模块可以提高代码的可维护性、可重用性&#xff0c;避免函数名和变量名冲突&#xff0c;方便其他程序和脚本的导入和使用。 二、模块的自定义 创建一个新…

基于ssm的社区医院儿童预防接种管理系统设计与实现-计算机毕业设计源码+LW文档

开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

且看五年开发码农,如何备战仨月硬刚字节面试官,轻松拿offer

写在前面 前不久跟几个哥们儿在一起吃喝玩闹&#xff0c;因为都是程序员出身&#xff0c;多少还是会谈谈各自公司的状况&#xff0c;其中一位朋友就是面临着跳槽换工作的情况。虽然做了好几年开发&#xff0c;但还是有很大压力&#xff0c;不光因为此次是想进字节跳动&#xf…

变更控制委员会CCB

在实施整体变更控制过程中&#xff0c;每项记录在案的变更请求都必须由一位责任人批准或否决&#xff0c;这个责任人通常是项目发起人或项目经理。应该在项目管理计划或组织流程中指定这位责任人。必要时&#xff0c;应该由变更控制委员会&#xff08;CCB&#xff09;来开展实施…

vue中keep-alive的作用

vue中keep-alive的作用1、什么是keep-alive?2、作用3、使用场景4、基本使用4.1、所有组件都缓存4.2、include&#xff1a;只有包裹的组件名被缓存4.3、exclude&#xff1a;只有包裹的组件名不会被缓存4.4、max&#xff1a;组件最多缓存的数量4.5、结合路由router&#xff0c;缓…

CUDA编程基础:线程标识符计算,以及并行运算原理

1,CUDA编程的基本概念 对于一个2-dim的block(D_x, D_y) ,既指的是二维的平面的block模型; gridDim: 这个变量包含网格的维度 blockIdx: 这个变量包含了网格中的线程块索引(0~gridDim-1) blockDim: 这个变量包含了线程块的维度 threadIdx: 这个变量包含了线程块中的线程索引(…

机器人——力控

力控制背后的基本思想很简单&#xff1a;传感器的输出用于在控制器中闭环&#xff0c;调整每个关节扭矩以匹配所需的输出。在某种程度上&#xff0c;这类似于位置控制。您只需用参考力&#xff08;来自力/扭矩传感器&#xff09;替换参考位置&#xff08;来自电机编码器&#x…

java程序设计笔记 -- 继承与多态

继承与多态 子类 is a 关系 整体与部分 has a extends 继承关键词 父类也叫做 超类 基类 object 类 类层次最高点&#xff0c;是所有类的直接或间接父类 方法 public final Class getClass(): 获取当前对象所属的类信息&#xff0c;返回Class对象public Strig toString (…

计划评审技术

计划评审技术就是把工程项目当成一种系统&#xff0c;用网络图或者表格或者矩阵来表示各项具体工作的先后顺序和相互关系&#xff0c;以时间为中心&#xff0c;找出从开工到完工所需要时间的最长路线&#xff0c;并围绕关键路线对对系统进行统筹规划&#xff0c;合理安排以及对…

python--数据容器--列表

目录 1.python中的数据容器&#xff1a; 2.列表的定义 列表的下标索引 列表的查询功能 &#xff08;方法&#xff09; 修改列表的值 在指定位置插入元素 追加元素 追加一批元素 删除元素 删除某个元素在列表中的第一个匹配项 清空列表 统计某元素在列表内的数量 统…

ChIP-Seq,MeRIP-seq峰(peak),eccDNA等染色体分布可视化

人类基因组由1-22、X、Y等染色体构成&#xff0c;染色体经过细胞学处理后会呈现出深浅不同的染色带。 染色带的数目、部位、宽窄和着色深浅均相对稳定性&#xff0c;所以每一条染色体都有固定的分带模式&#xff0c;即称带型。 染色体带型是鉴别染色体的重要依据。图1. 人类染色…

【Android进阶】8、单 Activity-多 Fragment 模式 与 Fragment 的管理器

文章目录8.1 UI的灵活需求8.2 Fragment8.3 Fragment实战8.4 创建数据类8.5 创建 UI fragment8.5.1 定义 CrimeFragment 布局8.5.2 创建 CrimeFragment 类8.5.2.1 实现 Fragment 的生命周期函数8.5.2.2 在 Fragment 中实例化部件8.6 让 Activity 托管 Fragment8.6.1 定义 Activi…

Linux网络编程基础<多进程并发服务器>

一、应用场景 最简单的socket示列代码只能一个客户端连接一个服务器&#xff0c;并不支持多个客户端对服务器的连接&#xff0c;为了能让多个客户端进行连接所以需要多进程或者多线程处理 二、思路解析 服务器端的程序是俩个套接字socket创建一个lfd&#xff0c;accept创建一…

外置编码矩阵神经网络all you need

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

数据结构刷题:第十三天

目录 一&#xff0c;二叉搜索树中的搜索 1&#xff0c;递归 复杂度分析 2&#xff0c;迭代 复杂度分析 二&#xff0c;二叉搜索书中的插入操作 1&#xff0c;模拟 思路与算法 复杂度分析 一&#xff0c;二叉搜索树中的搜索 700. 二叉搜索树中的搜索 - 力扣&#xff08;L…

阿里P8大佬,整理的从零构建企业级容器集群实战笔记,真涨薪神器

前言 微服务架构时代对我们的基础设施管理提出了非常大的挑战&#xff0c;DevOps和持续交付成为了基本能力要求。没有近两年容器技术的快速发展&#xff0c;这些能力可能仍然只属于少数技术实力强大的互联网公司。容器技术的应用从真正意义上催化了我们在基础设施管理上的革命…

最小系统板 STM32入门,呼吸灯实现(STM32F103C6T6)

Hi, I’m Shendi 接着前一篇 https://blog.csdn.net/qq_41806966/article/details/126894938 这一次使用库来进行 LED 灯的开关&#xff0c;及延时的实现 呼吸灯实现 之前使用直接修改地址的方式实现点灯&#xff0c;这次用 GPIO 实现点灯&#xff0c;并加上延迟&#xff0…

傅立叶及其python应用

前言 本文是傅立叶及其python应用系列的第三篇文章对应的仓库地址为https://github.com/yuanzhoulvpi2017/tiny_python/tree/main/Fourier_Series 介绍 第二篇主要介绍了傅立叶的核心&#xff1a;“傅里叶级数就是函数在某个函数空间中各个基底的投影和“&#xff0c;然后基…

Day27、使用DQL命令查询数据

1、DQL语言 1.1、DQL(Data Query Language&#xff0c;数据查询语言) 1&#xff09;查询数据库数据&#xff0c;如SELECT语句 2&#xff09;简单的单表查询或多表的复杂查询和嵌套查询 3&#xff09;数据库语言中最核心、最重要的语句 4&#xff09;使用频率最高的语句 1.2、SE…

Linux小白学习

Linux学习 虚拟机 安装Linux镜像下载简单命令含义 一、虚拟机安装 参考视频&#xff1a;https://www.bilibili.com/video/BV1dS4y1e7rH?share_sourcecopy_web&vd_source0d57c2e2317ebb16893c37677d1b8931 二、Linux镜像下载 网盘下载地址&#xff1a; 链接&#xff1a;h…