回溯算法(试探法)

在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

回溯算法解决问题的

  • 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。
  • 确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。
  • 以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。

实例:

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,
每一次只能向左,右,上,下四个方向移动一格,
但是不能进入行坐标和列坐标的数位之和大于k的格子。
例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

class Solution:def movingCount(self, threshold, rows, cols):"产生 0 矩阵 "board=[[0 for i in range(cols)] for j in range(rows)]global accacc = 0"下标之和,若大于threshold则TRUE,否则Folse"def block(r,c):s=sum(map(int,str(r)+str(c)))return s>thresholddef traverse(r,c):global accif not (0<=r<rows and 0<=c<cols):   # 超出角标范围挑出returnif board[r][c]!=0:    # 不等于0 跳出returnif board[r][c]==-1 or block(r,c):board[r][c]=-1    #超出门限的点记录-1returnboard[r][c]=1 #符合规定的点记录1,并计数加一acc+=1traverse(r+1,c)traverse(r-1,c)traverse(r,c+1)traverse(r,c-1)traverse(0,0)return acco = Solution()
print(o.movingCount(4 ,3 ,3))# 输出结果:
9

转载于:https://www.cnblogs.com/spmt/p/10607027.html

Python 回溯算法相关推荐

  1. python 回溯算法总结

    python 回溯算法 回溯算法理论基础 组合 组合总数III 电话号码的字母组合 组合总和 组合总和ii 分割回文串 复原IP地址 子集问题 子集问题II 递增序列 全排列 全排列II 重新安排行程 ...

  2. python回溯算法_什么是回溯法,Python解法交流?

    只有去多做题,才能慢慢掌握.力扣​leetcode-cn.com LeetCode 上的解释 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 ...

  3. python回溯算法_回溯算法经典问题及python代码实现

    2. 0-1背包问题 # 0-1 bag problem import sys def f(no, cur_mass, things, num): global cur_max if no == nu ...

  4. python回溯算法

    回溯算法:一种优先搜索算法(试探法):按优条件向前搜索,以达目标:当试探到某步,发现原来选择并不好(走不通),就退回重新选择. 回溯算法的一般步骤:1:定义问题的解空间(搜索中动态生成):2:确定易搜 ...

  5. 回溯python_用Python回溯算法

    我试图实现一个算法,该算法需要两个in和n和k,其中n是连续的座位数,k是试图坐在那一行的学生人数.问题在于每个学生在两边都必须至少有两个座位.我有一个函数可以生成所有的子集(一个0或1的数组,1表示 ...

  6. python回溯算法全排列_python 回溯法 子集树模板 系列 —— 11、全排列

    问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...

  7. 八十四、Python | Leetcode回溯算法系列

    @Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  8. python 动态规划 回溯_回溯算法 - 全排列算法实现(pythondart)

    回溯算法 , 就是 穷举 解决一个回溯问题,实际上就是一个决策树的遍历过程. 路径: 也就是已经做出的选择 选择列表: 也就是你当前可以做的选择 结束条件: 也就是到达决策树底层,无法再做选择的条件. ...

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

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

最新文章

  1. 吐血整理:手拿几个大厂 Offer 的秘密武器!
  2. Chapter 6 : 综合数据和分组函数
  3. 你已经是个成熟的985大学了,请不要在大一教 C 语言!
  4. Keras 深度学习框架中文文档
  5. Django用户注册、登录、注销(一)
  6. php之简单使用数据库
  7. java如何模拟请求_单元测试如何模拟用户请求
  8. js call(),apply(),对象冒充,改变变量作用域
  9. nyoj_66_分数拆分_201312012122
  10. Cluster - LB - haproxy
  11. python根据坐标点拟合曲线绘图
  12. 深入进货单-期初单据
  13. iOS开发中,应用内直接跳转到Appstore
  14. Zend Studio IDE使用yii framework框架无代码提示的解决方法
  15. 微软产品居然出现中文兼容问题
  16. Wiki使用技巧汇总
  17. CSS3解决连续英文字符或数字不能自动换行的问题
  18. 黑马程序员--一个初中没毕业的苦逼,到8.5k的程序人生,感谢黑马
  19. Android 应用页面延缓载入
  20. HDU 2075 JAVA

热门文章

  1. JVM中的STW和CMS
  2. 软件测试第二次作业:JUNIT单元测试方法
  3. 仿苹果通知显示在图标右上角上
  4. zend studio让编译器导入项目为utf-8如何设置
  5. 技术的不断革新也有负面影响
  6. 利用OpenCV的imread将RGB图像转化为灰度图像
  7. struct_config.xml中action/set-property标签的用法
  8. leetcode算法题--可被三整除的最大和
  9. git配置用户名和密码_IDEA配置码云教程
  10. win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧