递归算法学习案例--迷宫回溯问题(java实现)

用Java谈回溯算法和迷宫寻路问题 谈了递归之后,谈谈如何利用递归实现回溯算法,更近一步地理解递归的本质,运用回溯算法解决更多复杂问题,利用计算机解决人无法解决的问题。 阅读详情

迷宫回溯问题

如果看不太懂,建议使用debug多运行几遍,就能很清晰的了解递归的整个过程,希望对你学习递归有帮助

public class Maze {
    public static void main(String[] args) {
        //先创建一个二维数组,模拟迷宫
        //地图
        int[][] map = new int[8][7];
        //1表示墙
        //将上下置为1
        for (int i = 0; i < 7; i++) {
            map[0][i] = 1;
            map[7][i] = 1;
        }
        //将左右置为1
        for (int i = 0; i < 8; i++) {
            map[i][0] = 1;
            map[i][6] = 1;
        }
        //设置障碍
        map[3][1] = 1;
        map[3][2] = 1;
        //输出地图
        System.out.println("地图情况如下:");
        for(int[] maps:map) {
            for(int i :maps){
                System.out.printf("%d\t",i);
            }
            System.out.println();
        }
        //探索迷宫
        setWay(map,1,1);
        //探索结果
        System.out.println("探索后的地图如下:");
        for(int[] maps:map) {
            for(int i :maps){
                System.out.printf("%d\t",i);
            }
            System.out.println();
        }
    }
    //使用递归回溯来给小球找路
    //小球从(1,1)出发到(6,5)位置
    //走迷宫时,需要确定一个策略:下->右->上->左,如果该点走不通则回溯
    //map[i][j]为0表示该点没有走过,为1表示墙,为2表示通路可以走,为3表示已经走过的死胡同
    /**
     *
     * @param map 表示地图
     * @param i 起始位置的坐标
     * @param j 
     * @return  如果找到通路,就返回true,否则返回false
     */
    public static boolean setWay(int[][] map, int i, int j) {
            if(map[6][5] == 2) {//是否到达终点
                return true;
            } else {
                if(map[i][j] == 0) {
                    map[i][j] = 2;
                    if(setWay(map,i+1, j)) {//向下走
                        return true;
                    } else if(setWay(map,i, j+1)) {//向右走
                        return true;
                    } else if(setWay(map,i-1, j)) {//向上走
                        return true;
                    } else if(setWay(map,i, j-1)) {//向左走
                        return true;
                    } else {
                        map[i][j] = 3;
                        return false;
                    }
                } else {
                    //如果map[i][j]!= 0, 则可能为1,2,3
                    return false;
                }
            }
    }
}
【数据结构与算法】之回溯、滑动窗口、分治算法经典问题 本文将对【数据结构与算法】回溯、滑动窗口、分治算法相关经典问题分享~,具体将对 回溯算法(包括全排列问题、N皇后问题),滑动窗口算法,分值算法(包括归并排序、快速排序)等进行详尽介绍~ 阅读详情

相关推荐

【华为机试真题Java】迷宫问题

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。数据范围: 2≤n,m≤10 , 输入的内容只包含 0≤val≤1。左上角到右下角的最短路径,格式如样例所示。说明:注意:不能斜着走!

820

迷宫寻路算法——流水算法

关于二维迷宫的解决办法,可寻得最短路径,算量较小且便捷

m0_74555761的博客 2031

java实现《围猫》游戏,基于广度优先算法

基于广度优先算法,记录最短路径,实现《围猫》模式的小游戏

四种迷宫生成算法的实现和可视化

(上图是使用随机化Prim算法生成一个200x200的迷宫的过程) Github项目地址:maze 前言 本文中的迷宫指的是最常见的那种迷宫:迷宫整体轮廓是二维矩形,迷宫里的格子是正方形的,格子上下左右各相邻另外一个格子(边和角除外),迷宫内部没有环路,也没有无法到达的格子,起点在一个角(本文中为左上角),终点在另一个角(本文中为右下角),从起点到终点有且仅有一条路径: 每个格子都可以抽象成图...

imred的专栏 2万+

追逐:用Java编写的游戏

追逐 用Javascript编写的游戏是业余爱好。 使用(或至少尝试过)实体组件系统(ECS)体系结构。 播放。

数据结构(Java)迷宫实现

数据结构(Java)实践作业迷宫参考书本使用栈结构实现的

迷宫寻路三大算法(BFS,DFS,A*)

迷宫寻路 这是我们的数据结构作业本加我们自己再网上找算法记录下来,不过本人比较执着画了几天时间还是把这些算法自己写出来了。总得来说网上所说的大体算法应该就有三种(BFS,DFS,A*) 这里是一个验证网址是南阳OJ的一道题这是网址 http://acm.nyist.me/problem/58 好了不说废话开始吧 BFS 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜...

Dog_dream的博客 2万+

简单迷宫(Maze)java编写

迷宫生成的 exe 可执行文件,源码纯 java 编写,有 gre 环境便可执行,学习源码可查看链接 https://blog.youkuaiyun.com/weixin_48033173/article/details/111353826

从1开始学Java数据结构与算法——递归解决迷宫回溯问题和八皇后问题

从1开始学Java数据结构与算法——递归解决迷宫回溯问题和八皇后问题递归介绍与分析案例引入递归机制:递归能解决的问题和规则迷宫回溯问题迷宫回溯问题分析迷宫回溯问题代码实现八皇后问题八皇后问题分析八皇后问题代码实现 递归介绍与分析 案例引入 现在有如下问题,下图是一个很简单的界面,红色区域表示墙,蓝色圆圈表示起始位置,蓝色三角形表示终点位置。那么我们用代码去解决这个问题的话,肯定不能将所有可能的路径...

weixin_43851232的博客 834

AI编程助手Cursor如何革新经济学研究:从计量模型到可视化全流程实战

在数据科学和人工智能技术蓬勃发展的今天,如何高效地将前沿AI工具融入专业领域的研究工作流,成为提升科研效率的关键。其核心原理在于通过自然语言交互,将研究者的专业问题转化为机器可执行的指令,从而实现人机协作的范式转移。这一技术的核心价值在于大幅降低非计算机背景研究者的编程门槛,将精力从繁琐的代码实现中解放出来,更聚焦于学科本身的思想与逻辑。尤其在经济学、金融学等高度依赖数据分析和计量建模的领域,AI编程助手能够快速处理数据清洗、模型估计、可视化及结果解释等任务。具体到应用场景,研究者可以利用结构化提示词工程,

weixin_42531579的博客 296

PPO实战:如何用强化学习让小车爬上MountainCarContinuous-v0山顶(附完整代码)

本文提供了使用PPO算法解决MountainCarContinuous-v0环境的完整实战教程。针对该环境的连续动作空间和稀疏奖励挑战,文章详细解析了PPO智能体的网络架构、状态归一化、GAE优势估计等核心实现,并附带了可直接运行的PyTorch代码。同时分享了关键的调参技巧和实战避坑指南,帮助读者高效训练智能体完成小车爬坡任务。

linux的博客 968

如何用JAVA实现迷宫回溯问题

前言【本文部分内容引用于尚硅谷老师的视频,如有侵权,请及时联作者】 哈喽,小伙伴们,大家好!我是槿凉。哎呀,这几天刚学算法学的脑阔疼,这不今天刚学完迷宫回溯问题,连夜肝出了这篇博客,下面就跟小伙伴们分享一下我的学习成果叭! 如何理解"回溯"这个词呢?说白了就是利用递归相关的知识,来解决一些实际生活中的问题。这里我用一个简单的迷宫游戏带大家理解一下这个算法! 话不多说,先上代码: public class migong { public static void main(String[] arg

冲击大厂之路!!! 917

OpenEuler22.03 LTS下Zabbix7.0监控系统的容器化部署避坑指南(含Docker-Compose完整配置)

本文详细介绍了在OpenEuler22.03 LTS操作系统上容器化部署Zabbix7.0监控系统的完整流程,包括Docker引擎配置、Docker-Compose编排、网络模式选择及性能调优等关键步骤。针对OpenEuler环境下的特殊问题提供了解决方案,帮助用户高效搭建稳定可靠的监控系统。

python9snake的博客 267

学习笔记-迷宫回溯(递归)

递归的应用-迷宫回溯 此代码仅供找到出口,并不能找到最短路径,如果找到纯属巧合。 没出口的话会出现3; public class MiGong { public static void main(String[] args) { //县创建一个二维数组模拟迷宫 int[][] map = new int[8][7]; //使用1表示墙 ...

Shine_QianMo的博客 2414

阿里云人工智能工程师ACA认证免费课程学习笔记

阿里云人工智能工程师ACA认证免费课程学习笔记

engchina的专栏 2013

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 453

Java数据结构-迷宫回溯问题 蓝桥必备

本届蓝桥杯备赛中,作为c++的B组(我报错了,别问我为什么不说Java),显赫的提出了迷宫回溯问题!除了在大赛中出现,迷宫回溯问题也是我们更好的理解递归和回溯的重要途经.

算法萌新一枚 1404

【教程4>第5章>第19节】基于Gardner环的位同步系统MATLAB仿真与带时偏基带数据导出

由于在FPGA中,时偏的影响主要是由系统收发两端晶振的不同步带来的,所以在仿真测试阶段,很难直接通过FPGA来模拟这个因素,所以我们采用MATLAB模拟带时偏的基带输入信号,并将其导出,由FPGA调用作为测试信号源。可以看到,同步之后(图3)相对于带时偏的基带信号(图2),其更接近标准的数据(图1),且抖动较小。订阅过的朋友可以复习下这个课程,没有订阅的朋友,也可以直接复制如下的程序进行仿真测试。上述程序中,加入时偏的基带信号,通过子函数。同步之后,可以恢复出标准的QPSK星座图。

FPGA/MATLAB学习教程/源码/项目合作开发 520

Java学习——数据结构——递归实现迷宫问题

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步[网站](https://www.bilibili.com/video/BV1E4411H73v?p=46) 主要分析都在代码注释里,在老师的基础上重构了并且可以简单的统计步数。 package com.recursion; /** * 迷宫问题 * 说明 * 1、map 表示地图 * 2、x,y 表示起点 * 3、如果小球能到map[6][5]位置,则说明通路找到 * 4、0表示没有走过、1表示为墙、2表示通路可以走、3表示该点已经走过,

qq_41853002的博客 397

使用Qt在FreeRTOS上构建MCU应用程序

如果我们想要在FreeRTOS上运行该应用程序,我们需要选择适用于我们处理器架构的交叉编译工具链,并将目标设备设置为我们的开发板。在该代码中,我们使用xTaskCreate()函数创建了一个名为“qt_task”的任务,并将其启动。首先,我们需要安装Qt for MCU开发环境。Qt for MCU是基于Qt 5开发的针对MCU的特殊版本,它可以生成最小体积的代码,从而适用于资源有限的嵌入式系统。如果我们想要在FreeRTOS上运行这个程序,我们需要将其包装在一个任务中,并在任务创建后启动Qt的事件循环。

ByteWhizX的博客 1815

7、复杂分布式水文模型的两阶段代理参数校准框架

本文提出了一种针对复杂分布式水文模型的两阶段代理参数校准框架,旨在解决可变入渗能力模型(VIC)在参数校准过程中计算成本高、耗时长的问题。该框架结合AdaBoost与反向传播神经网络(BPNN)构建高精度代理模型,并引入ε-NSGA II多目标优化算法加速搜索最优参数集。通过在兰江流域和湘江流域的实验验证,该方法在校准效率上提升了约20倍,同时保持了高模拟精度(NSE接近1,Bias接近0)。框架采用两阶段设计:第一阶段(SM-I)快速筛选关键参数范围,第二阶段(SM-II)进行高精度预测,显著减少了无效计

apple5的专栏 86

【尚硅谷】Java数据结构与算法笔记05 -递归

八皇后问题, 是一个古老而著名的问题, 是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯 1848 年提出: 在8×88 \times 88×8格的国际象棋上摆放八个皇后, 使其不能互相攻击, 即: 任意两个皇后都不能处于同一行、 同一列或同一斜线上, 问有多少种摆法(92)。

知不足而奋进,望远山而前行 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Java数据结构和算法】010-递归:迷宫问题、八皇后问题(回溯算法)

一、递归应用场景和调用机制 1、简介 简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 2、两个案例 打印问题: package com.zb.ds; //递归 public class Recursion { public static void main(String[] args) { test(4); } public static void test(int n) { .

訾博(ZiBo)的博客 359

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java迷宫回溯(递归)

代码简单,写起来也简单,从零思考很难,留着学习 import org.junit.jupiter.api.Test; /** * @author Drug * @create 2020-04-19 13:23 */ public class test { @Test void test1() { //设置迷宫 int[][] map = ...

DrugHua的博客 449

Java算法-一文搞懂dfs(递归,搜索,回溯,剪枝)

本篇文章讲解了 dfs 算法 的相关知识,希望能帮助到你。

爱是小小的癌的博客 2430

java学习 递归解决迷宫及N皇后问题

递归:方法自己调用自己,不断地入栈出栈。 递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。这样我们就能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂的问题。 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回

m0_47621042的博客 352
上一篇: MyBatis官方参考文档(语言自选)
下一篇: 数据结构--线索化二叉树学习案例(java版)
JavaWizard-M
博客等级 码龄6年 3159粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值