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中global与nonlocal比较
Nov 21 Python
Python 的描述符 descriptor详解
Feb 27 Python
Python实现的桶排序算法示例
Nov 29 Python
python的unittest测试类代码实例
Dec 07 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
python安装requests库的实例代码
Jun 25 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 Python
python 利用toapi库自动生成api
Oct 19 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 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
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
php实现的用户查询类实例
2015/06/18 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
laravel5.6实现数值转换
2019/10/23 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
用Eclipse写python程序
2018/02/10 Python
python文本数据相似度的度量
2018/03/12 Python
对Python3中的input函数详解
2018/04/22 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
对python 调用类属性的方法详解
2019/07/02 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python Django搭建网站流程图解
2020/06/13 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
入党积极分子自我鉴定
2014/02/18 职场文书
媒体宣传策划方案
2014/05/25 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
英语投诉信范文
2015/07/03 职场文书