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实现Linux下守护进程的编写方法
Aug 22 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
详解Python with/as使用说明
Dec 13 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
python super()函数的基本使用
Sep 10 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 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 curl基本操作详解
2013/07/23 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
基于jQuery封装的分页组件
2017/06/26 jQuery
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
Vue指令指令大全
2019/02/09 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python自定义一个异常类的方法
2019/06/27 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
如何基于Python实现自动扫雷
2020/01/06 Python
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
年度考核自我鉴定
2013/11/09 职场文书
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
大学生求职计划书
2014/04/30 职场文书
班级团队活动方案
2014/08/14 职场文书
大学辅导员述职报告
2015/01/10 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
详解Java实践之建造者模式
2021/06/18 Java/Android
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python