数据结构与算法之迷宫回溯
什么是回溯?
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法
迷宫回溯
迷宫就是回溯思想最经典的一个问题,规定起点和终点,找到起点到终点的通路,由于找路的过程中,可能会存在不通的路,则需要返回上一个节点,寻找其它通路,这个就是回溯
。
代码示例:
public class MazeDemo {public static void main(String[] args) {// 先创建一个二维数组,模拟迷宫// 地图int[][] map = new int[8][7];// 使用1 表示墙// 上下全部置为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;}//设置挡板, 1 表示map[3][1] = 1;map[3][2] = 1;
// map[1][2] = 1;
// map[2][2] = 1;// 输出地图System.out.println("地图的情况");for (int i = 0; i < 8; i++) {for (int j = 0; j < 7; j++) {System.out.print(map[i][j] + " ");}System.out.println();}//使用递归回溯给小球找路setWay(map, 1, 1);//输出新的地图, 小球走过,并标识过的递归System.out.println("小球走过,并标识过的 地图的情况");for (int i = 0; i < 8; i++) {for (int j = 0; j < 7; j++) {System.out.print(map[i][j] + " ");}System.out.println();}}//使用递归回溯来给小球找路//说明//1. map 表示地图//2. i,j 表示从地图的哪个位置开始出发 (1,1)//3. 如果小球能到 map[6][5] 位置,则说明通路找到.//4. 约定: 当map[i][j] 为 0 表示该点没有走过 当为 1 表示墙 ; 2 表示通路可以走 ; 3 表示该点已经走过,但是走不通//5. 在走迷宫时,需要确定一个策略(方法) 下->右->上->左 , 如果该点走不通,再回溯/*** * @param map 表示地图* @param i 从哪个位置开始找* @param j * @return 如果找到通路,就返回true, 否则返回false*/public static boolean setWay(int[][] map, int i, int j) {if(map[6][5] == 2) { // 通路已经找到okreturn 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, 3return false;}}}
}
数据结构与算法之迷宫回溯相关推荐
- 数据结构:递归(迷宫回溯、八皇后)
求阶乘 不死神兔 public class Quean {//定义有几个皇后int Max;//定义一个数组存放皇后的位置int[] arr = new int[Max];int count=0;pu ...
- 数据结构与算法——递归、回溯与分治
文章目录 1.预备知识 1.1 递归 1.2 回溯 1.3 位运算 2.子集 2.1 题目描述 2.2 解题思路--回溯递归法 2.3 C++实现 2.4 解题思路--位运算法 2.5 位运算实现 3 ...
- 数据结构与算法——递归、回溯与分治汇总整理
目录 预备知识:递归函数与回溯算法 例1-a:求子集(medium)(回溯法.位运算法) 例1-b:求子集2(medium)(回溯法) 例1-c:组合数之和2(medium)(回溯法.剪枝) 例2:生 ...
- 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题
第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...
- 数据结构与算法(Python)– 回溯法(Backtracking algorithm)
数据结构与算法(Python)– 回溯法(Backtracking algorithm) 1.回溯法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条 ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...
- 用栈、回溯算法设计迷宫程序
目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...
- 回溯算法解决迷宫问题
文章目录 前言 一.回溯法 二.算法应用--迷宫问题 1.问题描述 2.解题思路 三.Java代码实现 前言 本文介绍一种经典算法--回溯法,可作为迷宫问题的一种解法. 一.回溯法 回溯是一种算法思想 ...
- 【数据结构与算法】【算法思想】回溯算法
贪心算法 回溯算法 分治算法 动态规划 回溯算法思想应用广泛,除了用来指导深度优先搜索这种经典算法设计之外,还可以用在如正则表达式匹配,编译原理中的语法分析等. 除此之外,很多经典的数学问题都可以用回 ...
- java 回溯_java 实现迷宫回溯算法示例详解
用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...
最新文章
- 2021年春季学期-信号与系统-第十三次作业参考答案-第六小题
- cvc-complex-type.3.2.2: 元素 'constructor-arg' 中不允许出现属性 'name'
- C++知识点33——使用C++标准库(无序关联容器unordered_(multi)map,unordered_(multi)set)
- java join()源码_Java Thread的join() 之刨根问底
- 【机器学习基础】机器学习模型的度量选择(上)
- mysql 锁 会话_MySQL会话锁等待关系原理
- edge浏览器扩展插件中心10月发布 可直接安装Chrome扩展
- NFC 与 RFID
- C# 打开指定的目录 记住路径中 / 与 \ 的使用方法
- [转载]jQuery操作Table学习总结
- 2018年高考631选计算机,2021年高考650分可以上什么大学 650分左右的院校
- Android Canvas API总结和使用方法
- python qq机器人 发送文件_10.【代码】QQ群发机器人 - Python网络爬虫实战
- Vue基础渲染及修饰符
- 谷粒商城高级篇(38)——异步编排之商品详情查询
- 罗丹明标记鬼笔环肽|TRITC Phalloidin,915013-10-4
- Java 线程池 8 大拒绝策略,面试必问!
- 闰秒是什么?ntp如何处理闰秒?
- verdi fsdb转vcd波形:用于后端功耗分析
- 为什么能效管理对智慧建筑的精细化运营如此重要?
热门文章
- Word TOC域的使用说明
- 机器人电机驱动及智能控制分析及展望
- cad计算机土方软件,CAD土方工程量算量插件(土方工程量计算工具)V1.1 正式版
- html中一级标题和二级标题,如何设置一级二级三级标题
- w10系统的服务器属性在哪,DNS设置在哪里、设置什么好?Win10电脑DNS设置指南
- Python+旧衣物捐赠系统 毕业设计-附源码290942
- react引入html2canvas和jspdf生成PDF打印及下载
- filter函数 与filtfilt函数的效果区别
- Unity - 射线检测
- 微信小程序学习14--小程序微信支付流程分析及实现