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使用CMD模块更优雅的运行脚本
May 11 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
Python键盘输入转换为列表的实例
Jun 23 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
python实现单链表的方法示例
Sep 03 Python
python实现超市管理系统(后台管理)
Oct 25 Python
python ETL工具 pyetl
Jun 07 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
如何用python 操作zookeeper
Dec 28 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
浅谈Python数学建模之数据导入
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调用数据库的存贮过程
2006/10/09 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
python正则表达式re之compile函数解析
2017/10/25 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
学生打架检讨书1000字
2014/01/16 职场文书
如何撰写岗位职责
2014/02/01 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
详解Python函数print用法
2021/06/18 Python
Ajax实现异步加载数据
2021/11/17 Javascript
Python可视化神器pyecharts绘制水球图
2022/07/07 Python