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 05 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
深入浅析python with语句简介
Apr 11 Python
Python中的单继承与多继承实例分析
May 10 Python
linux下python使用sendmail发送邮件
May 22 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
pandas DataFrame创建方法的方式
Aug 02 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
Python常用数据分析模块原理解析
Jul 20 Python
详解解Django 多对多表关系的三种创建方式
Aug 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
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
php字符串分割函数用法实例
2015/03/17 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
php-app开发接口加密详解
2018/04/18 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
jQuery Mobile 和 Kendo UI 的比较
2016/05/05 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
教师开学感言
2014/02/14 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
环境建设实施方案
2014/03/14 职场文书
报关报检委托书
2014/04/08 职场文书
2014年师德承诺书
2014/05/23 职场文书
团日活动总结模板
2014/06/25 职场文书
股指期货心得体会
2014/09/10 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
营业员岗位职责
2015/02/11 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
vue+echarts实现多条折线图
2022/03/21 Vue.js
关于vue-router-link选择样式设置
2022/04/30 Vue.js