java递归-(迷宫问题)

server/2024/12/22 23:43:52/

前面

这里我们来玩个有趣的事情,链接是0221_韩顺平Java_老鼠出迷宫1_哔哩哔哩_bilibili

我们要找的是小老鼠按路径走到右下点

要点

我们这里方法调用时对于引用类型:如java中引用数据类型有哪些?_java引用数据类型-CSDN博客

会共享引用类型的数据。这里我们就来用引用类型的递归

代码

//主类
public class hello{public static void main(String[] args){//构建地图。//二维数组表示 int[][] map=//0表示可走 1表示障碍物int [][]map=new int[8][7];//接着上面一行和最下面一行设置1for (int i=0; i<7;i++ ) {map[0][i]=1;map[7][i]=1;}//将最右边列和最左边列设置1for (int i=0;i<8 ;i++ ) {map[i][0]=1;map[i][6]=1;}for (int i=0;i<map.length ;i++ ) {for (int j=0; j<map[i].length; j++) {System.out.print(" "+map[i][j]);}map[3][5]=1;map[3][4]=1;System.out.print("\n");//换行""}//输出地图T t1=new T();t1.findway(map,1,1);System.out.print("====找路地图情况\n");for (int i=0;i<map.length ;i++ ) {for (int j=0; j<map[i].length; j++) {System.out.print(" "+map[i][j]);}System.out.print("\n");//换行""}}
}

我们先用1,0来描述我们的图片

结果

D:\Store files\Job saving\java_store>java.exe li.java
====地图情况1 1 1 1 1 1 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 1 1 1 1D:\Store files\Job saving\java_store>

实现路径找

    我们来利用        0表示可以走  1表示障碍物 2表示可以走 3表示走过但是是死路

我们来利用findway方法。用参数int[][] map,这个就是数组。我们前面说过了递归参数数组里面的值是共享的

public boolean findway(int[][] map,int i,int j)

我们前面说过了不同方法栈中的n是不同的,不过再数组中的值确实相同的先来,判断在右下角的位置是不是2,如果是2的话,就相当于找到了位置

if (map[6][5]==2) {//说明已经找到return true;

如果没找到,我们就上下左右的探问,我们是规定了0可以走的,如过这个位置为0那么我们就使得他为2,并且再次进行用递归判断

if (findway(map,i+1,j)) {//往下看看。如果findway(map,i+1,j))就是新的map,这个新的map是往下走后i,j=2的。

然后再if (map[6][5]==2) {//说明已经找到
            return true;
        }

判断一下,又是不满足的。就又到了    if(map[i][j]==0){
                //当前这个位置为0.说明可以走
                map[i][j]=2;

这里,然后又将当前位置等于2.先下返回true,往下往右则同理

我们知道了递归的时候谁调用函数,那么函数return的值也就是谁调用他时的位置。就是用if(true)判断

else{if(map[i][j]==0){//当前这个位置为0.说明可以走map[i][j]=2;if (findway(map,i+1,j)) {//先下return true;}else if (findway(map,i,j+1)) {//右return true;}else if (findway(map,i-1,j)) {//上return true;					}else if (findway(map,i,j-1)) {//上return true	;				}else{map[i][j]=3;return false;}}else  {//map[i][j]=1,2,3return false;//已经测试过了}}

我们在看3时走过但走不通。这是最后判断的

map[i][j]=3;return false;

那我们来输出并看看结果

结果

====地图情况1 1 1 1 1 1 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 1 1 1 1
====找路地图情况
====地图情况1 1 1 1 1 1 11 2 0 0 0 0 11 2 2 2 0 0 11 1 1 2 0 0 11 0 0 2 0 0 11 0 0 2 0 0 11 0 0 2 2 2 11 1 1 1 1 1 1

后面我们再来看看将障碍设置围住它

map[1][2]=1;map[2][2]=1;map[2][1]=1;

障碍

 1 1 1 1 1 1 11 0 1 0 0 0 11 1 1 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 1 1 1 1

结果

 1 1 1 1 1 1 1
 1 3 1 0 0 0 1
 1 1 1 0 0 0 1
 1 0 0 0 0 0 1
 1 0 0 0 0 0 1
 1 0 0 0 0 0 1
 1 0 0 0 0 0 1
 1 1 1 1 1 1 1

后面我们来寻找最优的路线


http://www.ppmy.cn/server/35635.html

相关文章

DNS、ICMP、NAT以及代理服务器

目录 1. DNS 1.1. DNS 背景 1.2. 域名简介 1.3. 域名解析过程 2. ICMP 2.1. ICMP 的功能 2.2. ICMP 的报文格式 2.3. ping 命令 2.4. traceroute 命令 3. NAT和代理服务器 3.1. NAT 技术 3.2. NAT IP转换过程 3.3. NAT 技术的缺陷 3.4. 代理服务器 3.4.1. 正向…

REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS【大模型的协同推理】

目录 前言一、ABSTRACT二、INTRODUCTION三、KNOWLEDGE-INTENSIVE REASONING TASKS3-1、SETUP3-2、METHODS3-3、RESULTS AND OBSERVATIONS 四、DECISION MAKING TASKS4-1、ALFWorld TASK4-2、WebShop TASK 五、RELATED WORK六、CONCLUSION总结 前言 文章提出了ReAct方法&#xf…

算法训练营第二十天 | LeetCode 110平衡二叉树、LeetCode 257 二叉树的所有路径、LeetCode 404 左叶子之和

LeetCode 110 平衡二叉树 递归写法很简单&#xff0c;直接自底向上每个节点判断是否为空&#xff0c;为空说明该层高度为0。不为空用一个int型变量l记录左子树高度&#xff08;递归调用该函数自身&#xff09;&#xff0c;一个int型变量r记录右子树高度&#xff08;同样递归调…

unittest_parameterized批量测试测试用例

import unittest from parameterized import parameterizeddef add(x, y):return xy"""问题&#xff1a;如果有三组数据需要测试&#xff1f;[(1,1,2), (1,2,3), (0,3,3)] """def get_data():return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]# 定义测试…

【高校科研前沿】中国科学院地理资源所钟帅副研究员研究组博士生朱屹东为一作在Top期刊发文:从潜力到利用:探索西藏风能资源开发的技术路径优化布局

01 文章简介 论文名称&#xff1a;From potential to utilization: Exploring the optimal layout with the technical path of wind resource development in Tibet&#xff08;从潜力到利用:探索西藏风能资源开发的技术路径优化布局&#xff09; 文章发表期刊&#xff1a;《…

美国防部发布《DevSecOps持续授权实施指南》(上)

文章目录 前言一、介绍(一)什么是持续授权?二、cATO能力(一)评价标准三、方法(一)基本概念(二)软件工厂应包括以下内容:(三)评估方式前言 美国防部首席信息官4月11日发布《DevSecOps 持续授权实施指南》,旨在指导美国国防机构实现持续授权操作(cATO),以操作由…

优化百度SEO:蜘蛛池自动收录的秘诀(蜘蛛池秒收录)

蜘蛛池自动收录技术解析 百度作为国内最大的搜索引擎之一&#xff0c;在网络搜索领域拥有巨大的影响力。对于网站主来说&#xff0c;如何让自己的网站在百度搜索结果中排名靠前&#xff0c;成为关注的焦点。其中&#xff0c;SEO&#xff08;SearchEngineOptimization&#xff…

Python发送邮件

这里使用 的是Python 中的 smtplib 模块来实现发送电子邮件。以下是一个简单的示例代码&#xff0c;演示如何使用给定的信息发送电子邮件&#xff1a; import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart# 你的邮箱信息 se…