什么是回溯?

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法

迷宫回溯

迷宫就是回溯思想最经典的一个问题,规定起点和终点,找到起点到终点的通路,由于找路的过程中,可能会存在不通的路,则需要返回上一个节点,寻找其它通路,这个就是回溯

代码示例:

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;}}}
}

数据结构与算法之迷宫回溯相关推荐

  1. 数据结构:递归(迷宫回溯、八皇后)

    求阶乘 不死神兔 public class Quean {//定义有几个皇后int Max;//定义一个数组存放皇后的位置int[] arr = new int[Max];int count=0;pu ...

  2. 数据结构与算法——递归、回溯与分治

    文章目录 1.预备知识 1.1 递归 1.2 回溯 1.3 位运算 2.子集 2.1 题目描述 2.2 解题思路--回溯递归法 2.3 C++实现 2.4 解题思路--位运算法 2.5 位运算实现 3 ...

  3. 数据结构与算法——递归、回溯与分治汇总整理

    目录 预备知识:递归函数与回溯算法 例1-a:求子集(medium)(回溯法.位运算法) 例1-b:求子集2(medium)(回溯法) 例1-c:组合数之和2(medium)(回溯法.剪枝) 例2:生 ...

  4. 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题

    第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...

  5. 数据结构与算法(Python)– 回溯法(Backtracking algorithm)

    数据结构与算法(Python)– 回溯法(Backtracking algorithm) 1.回溯法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条 ...

  6. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...

  7. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  8. 回溯算法解决迷宫问题

    文章目录 前言 一.回溯法 二.算法应用--迷宫问题 1.问题描述 2.解题思路 三.Java代码实现 前言 本文介绍一种经典算法--回溯法,可作为迷宫问题的一种解法. 一.回溯法 回溯是一种算法思想 ...

  9. 【数据结构与算法】【算法思想】回溯算法

    贪心算法 回溯算法 分治算法 动态规划 回溯算法思想应用广泛,除了用来指导深度优先搜索这种经典算法设计之外,还可以用在如正则表达式匹配,编译原理中的语法分析等. 除此之外,很多经典的数学问题都可以用回 ...

  10. java 回溯_java 实现迷宫回溯算法示例详解

    用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...

最新文章

  1. 2021年春季学期-信号与系统-第十三次作业参考答案-第六小题
  2. cvc-complex-type.3.2.2: 元素 'constructor-arg' 中不允许出现属性 'name'
  3. C++知识点33——使用C++标准库(无序关联容器unordered_(multi)map,unordered_(multi)set)
  4. java join()源码_Java Thread的join() 之刨根问底
  5. 【机器学习基础】机器学习模型的度量选择(上)
  6. mysql 锁 会话_MySQL会话锁等待关系原理
  7. edge浏览器扩展插件中心10月发布 可直接安装Chrome扩展
  8. NFC 与 RFID
  9. C# 打开指定的目录 记住路径中 / 与 \ 的使用方法
  10. [转载]jQuery操作Table学习总结
  11. 2018年高考631选计算机,2021年高考650分可以上什么大学 650分左右的院校
  12. Android Canvas API总结和使用方法
  13. python qq机器人 发送文件_10.【代码】QQ群发机器人 - Python网络爬虫实战
  14. Vue基础渲染及修饰符
  15. 谷粒商城高级篇(38)——异步编排之商品详情查询
  16. 罗丹明标记鬼笔环肽|TRITC Phalloidin,915013-10-4
  17. Java 线程池 8 大拒绝策略,面试必问!
  18. 闰秒是什么?ntp如何处理闰秒?
  19. verdi fsdb转vcd波形:用于后端功耗分析
  20. 为什么能效管理对智慧建筑的精细化运营如此重要?

热门文章

  1. Word TOC域的使用说明
  2. 机器人电机驱动及智能控制分析及展望
  3. cad计算机土方软件,CAD土方工程量算量插件(土方工程量计算工具)V1.1 正式版
  4. html中一级标题和二级标题,如何设置一级二级三级标题
  5. w10系统的服务器属性在哪,DNS设置在哪里、设置什么好?Win10电脑DNS设置指南
  6. Python+旧衣物捐赠系统 毕业设计-附源码290942
  7. react引入html2canvas和jspdf生成PDF打印及下载
  8. filter函数 与filtfilt函数的效果区别
  9. Unity - 射线检测
  10. 微信小程序学习14--小程序微信支付流程分析及实现