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装饰器的函数式编程详解
Feb 27 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
判断网页编码的方法python版
Aug 12 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
对python 自定义协议的方法详解
Feb 13 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
使用python接入微信聊天机器人
Mar 31 Python
PHP统计代码行数的小代码
Sep 19 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
python元组拆包实现方法
Feb 28 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获取服务器信息的实现代码
2013/02/04 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
php实现登录页面的简单实例
2019/09/29 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
小程序和web画三角形实现解析
2019/09/02 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
JS实现页面侧边栏效果探究
2021/01/08 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
基于python编写的微博应用
2014/10/17 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
财产公证书格式
2014/04/10 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
律师催款函范文
2015/06/24 职场文书
解决 redis 无法远程连接
2022/05/15 Redis