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 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
python 字典(dict)按键和值排序
Jun 28 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
python opencv实现图像边缘检测
Apr 29 Python
python 读取修改pcap包的例子
Jul 23 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
python对Excel的读取的示例代码
Feb 14 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
python数据处理之Pandas类型转换
Apr 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
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
九种原生js动画效果
2015/11/11 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Python3中的json模块使用详解
2018/05/05 Python
详解python3中zipfile模块用法
2018/06/18 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
python仿抖音表白神器
2019/04/08 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
中国好声音广告词
2014/03/18 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
Python列表的索引与切片
2022/04/07 Python