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中类的继承代码实例
Oct 28 Python
Python字典操作简明总结
Apr 13 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
整理Python 常用string函数(收藏)
May 30 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
基于python实现简单日历
Jul 28 Python
python 堆和优先队列的使用详解
Mar 05 Python
Python3 实现爬取网站下所有URL方式
Jan 16 Python
查看keras的默认backend实现方式
Jun 19 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 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正则表达匹配中文问题分析小结
2012/03/25 PHP
Javascript图像处理思路及实现代码
2012/12/25 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python实现dict版图遍历示例
2014/02/19 Python
Python中的startswith和endswith函数使用实例
2014/08/25 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python语法快速入门指南
2015/10/12 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python常用的json标准库
2019/02/19 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
Django中Middleware中的函数详解
2019/07/18 Python
python 一维二维插值实例
2020/04/22 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
签约仪式主持词
2014/03/19 职场文书
奠基仪式策划方案
2014/05/15 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
经济贸易系求职信
2014/08/04 职场文书
组工干部对照检查材料
2014/08/25 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
清洁工个人工作总结
2015/03/05 职场文书
婚宴父亲致辞
2015/07/27 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书