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实现远程调用MetaSploit的方法
Aug 22 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
Golang GBK转UTF-8的例子
Aug 26 Python
django序列化serializers过程解析
Dec 14 Python
Python实现ATM系统
Feb 17 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 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
Linux下php5.4启动脚本
2014/08/03 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
javascript随机变色实例代码
2019/10/15 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
python 实现二维列表转置
2019/12/02 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
小学生十佳少年事迹材料
2014/08/20 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
运动会广播稿50字
2015/08/19 职场文书
信息技术课教学反思
2016/02/23 职场文书
教你用python控制安卓手机
2021/05/13 Python