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字符串详细介绍
May 09 Python
Python入门教程之if语句的用法
May 14 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 Python
python使用paramiko实现远程拷贝文件的方法
Apr 18 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
python实现五子棋小程序
Jun 18 Python
Python Selenium参数配置方法解析
Jan 19 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
python3.x中安装web.py步骤方法
Jun 23 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浏览历史记录的方法
2015/03/10 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
DOM基础教程之事件类型
2015/01/20 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python性能提升之延迟初始化
2016/12/04 Python
python实现文件的备份流程详解
2019/06/18 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
建筑经济管理专业求职信分享
2014/01/06 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
优良学风班申请材料
2014/02/13 职场文书
实验室的标语
2014/06/20 职场文书
法定代表人证明书
2014/11/28 职场文书
世界文化遗产导游词
2015/02/13 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers