积累算法经验,积累解题方法——回溯算法,你必须要掌握的解题方法!

什么是回溯算法呢?

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

简单的理解就是我们走迷宫的时候,走到一个节点,然后有很多路,选一条路不通则退回该节点走其他路;都走不通再往上一个节点倒退,直到找出迷宫出口。

只是简单的概念无法真正理解这种算法的应用场景,这里用一道力扣题来进行讲解:

leetcode 79. 单词搜索

难度:中等

题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]

给定 word = “ABCCED”, 返回 true
给定 word = “SEE”, 返回 true
给定 word = “ABCB”, 返回 false

提示:
board 和 word 中只包含大写和小写英文字母。
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

来源:力扣(LeetCode)

  • 链接:https://leetcode-cn.com/problems/word-search

这道题使用回溯算法就是非常好的解法,在性能上也是非常不错的。

这里我们可以将首字母对应的每一个坐标都当做我们的迷宫入口,之后上下左右进行寻找,找到则继续,找不到就往上一级回溯,具体解法如下

通用解题法——回溯算法(理解+练习)相关推荐

  1. [回溯算法] 五大常用算法之回溯法

    算法入门6:回溯法 一. 回溯法 – 深度优先搜素 1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解 ...

  2. 回溯算法——算法总结(四)

    回溯算法也叫试探法,它是一种系统地搜索问题的解的方法.回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试.用回溯算法解决这个问题的一般步骤为: 1.定义一个解空间.它包括问题 ...

  3. 回溯算法解子集、组合、排序

    转载labuladong:力扣 代码方面,回溯算法的框架: result = [] def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor ...

  4. 回溯算法团灭子集、排列、组合问题

    回溯算法团灭子集.排列.组合问题 一.子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] ...

  5. 搞懂回溯算法,我终于能做数独了

    点击上方蓝字设为星标 东哥带你手把手撕力扣~ 作者:labuladong   公众号:labuladong 若已授权白名单也必须保留以上来源信息 经常拿回溯算法来说事儿的,无非就是八皇后问题和数独问题 ...

  6. 高效 遍历 算法_一文学会回溯算法解题技巧

    (给算法爱好者加星标,修炼编程内功) 来源:码海 前言 上文我们学习了深度优先搜索和广度优先搜索,相信大家对这两者的算法有了比较清楚的认识,值得一提的,深度优先算法用到了回溯的算法思想,这个算法虽然相 ...

  7. 一文学会回溯算法解题技巧

    前言 上文我们学习了深度优先搜索和广度优先搜索,相信大家对这两者的算法有了比较清楚的认识,值得一提的,深度优先算法用到了回溯的算法思想,这个算法虽然相对比较简单,但很重要,在生产上广泛用在正则表达式, ...

  8. 【算法思想:回溯法】回溯算法入门级详解

    回溯法是一种非常重要的算法思想,在大厂面试中频繁出现,所以做了一个笔记,记录了一下. 回溯算法与深度优先遍历 以下是维基百科中「回溯算法」和「深度优先遍历」的定义. 回溯法 采用试错的思想,它尝试分步 ...

  9. python数独伪代码回溯法_数独 #回溯算法 #CTF

    1. intro:巅峰极客的一道逆向 刷巅峰极客2020里的rev题fu!kpy,复杂得不行但是看到if d[1][0] != '8' or d[1][7] != '2'和if check(h1) ! ...

最新文章

  1. Examples_06_02(android)DDMS的data文件中没有显示文件。
  2. js实现网页防止被iframe框架嵌套及几种location.href的区别
  3. java 组件化_(原创)搭建一个组件化的监控平台
  4. Mysql索引示例_MYSQL索引实例
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上医院预约挂号系统
  6. 身为前端工程师,对你来说,你认为最重要的是什么?
  7. Linux从入门到精通——基础篇
  8. ROSE HA,想说爱你不容易——为ROSE HA配置IP资源的LocalFailover
  9. html布局flex有什么优势,css flex布局的优缺点是什么
  10. detach()函数的用法
  11. 计算机键入命令,Win7系统安装软件提示命令行语法错误键入“ 命令/?”怎么办...
  12. Qt设计精美的登录注册界面(包含SQLite数据库应用)
  13. 亚马逊再开3000+无人店!国内却一半是海水一半是火焰
  14. Nginx 动静分离 -02
  15. 解析四种大数据文件格式
  16. android安卓导航下载地址,安卓导航辅助软件:Android搜星帮助文件
  17. 冷月手撕408之操作系统(3)-操作系统的发展及分类
  18. 房屋装修合同书范本【收藏备用】
  19. 初一年级上学期计算机课知识总结,在电脑上学习七年级上册课程
  20. 教师资格证网站服务器,教师资格证网上报名上传照片IE设置

热门文章

  1. 2022-2028年中国氢化丁腈橡胶行业市场深度分析及投资规模预测报告
  2. 编写高性能Java代码的最佳实践
  3. leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法
  4. 关于python导入模块和package的一些深度思考
  5. docker通过镜像方式安装tomcat
  6. 最新SOTA模型和实现代码
  7. ModuleNotFoundError: No module named 'tools.nnwrap' pytorch 安装
  8. jieba分词工具的使用方法
  9. explain性能分析
  10. Auto ML自动调参