Python使用回溯法子集树模板解决爬楼梯问题示例


Posted in Python onSeptember 08, 2017

本文实例讲述了Python使用回溯法子集树模板解决爬楼梯问题。分享给大家供大家参考,具体如下:

问题

某楼梯有n层台阶,每步只能走1级台阶,或2级台阶。从下向上爬楼梯,有多少种爬法?

分析

这个问题之前用分治法解决过。但是,这里我要用回溯法子集树模板解决它。

祭出元素-状态空间分析大法:每一步是一个元素,可走的步数[1,2]就是其状态空间。不难看出,元素不固定,状态空间固定。

直接上代码。

代码

'''爬楼梯'''
n = 7 # 楼梯阶数
x = []  # 一个解(长度不固定,1-2数组,表示该步走的台阶数)
X = []  # 一组解
# 冲突检测
def conflict(k):
  global n, x, X
  # 部分解步的步数之和超过总台阶数
  if sum(x[:k+1]) > n:
    return True
  return False # 无冲突
# 回溯法(递归版本)
def climb_stairs(k): # 走第k步
  global n, x, X
  if sum(x) == n: # 已走的所有步数之和等于楼梯总台阶数
    print(x)
    #X.append(x[:]) # 保存(一个解)
  else:
    for i in [1, 2]: # 第k步这个元素的状态空间为[1,2]
      x.append(i)
      if not conflict(k): # 剪枝
        climb_stairs(k+1)
      x.pop()       # 回溯
# 测试
climb_stairs(0) # 走第0步

效果图

Python使用回溯法子集树模板解决爬楼梯问题示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python中模块pymysql查询结果后如何获取字段列表
Jun 05 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
简单了解Django ContentType内置组件
Jul 23 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python实现图片横向和纵向拼接
Mar 05 Python
Python try except else使用详解
Jan 12 Python
pytorch DataLoader的num_workers参数与设置大小详解
May 28 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 #Python
python中实现指定时间调用函数示例代码
Sep 08 #Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 #Python
python中实现延时回调普通函数示例代码
Sep 08 #Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 #Python
老生常谈Python startswith()函数与endswith函数
Sep 08 #Python
python学习必备知识汇总
Sep 08 #Python
You might like
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
python之yield表达式学习
2014/09/02 Python
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Python 探针的实现原理
2016/04/23 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
擅自离岗检讨书
2014/02/11 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
超市员工管理制度
2015/08/06 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers