博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 回溯法 子集树模板 系列 —— 16、爬楼梯
阅读量:5843 次
发布时间:2019-06-18

本文共 801 字,大约阅读时间需要 2 分钟。

问题

某楼梯有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步

效果图

709432-20170603121241414-2006689541.jpg

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/6936930.html
,如需转载请自行联系原作者
你可能感兴趣的文章
你应该知道的 RPC 原理
查看>>
Ubuntu安装词典
查看>>
KVM虚拟机在线添加网卡
查看>>
Spring解析
查看>>
java设计模式之——代理模式
查看>>
python中str和repr区别
查看>>
升级win10后无法使用桥接网络解决方法
查看>>
如何进行跨网段的远程唤醒
查看>>
数据挖掘-同比与环比
查看>>
nginx+php详解
查看>>
我的友情链接
查看>>
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
20135226黄坤信息安全系统设计基础期末总结
查看>>
轻松快捷创建VSFTP虚拟用户
查看>>
[转]Javascript原型继承
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
分布式系列文章 —— 从 ACID 到 CAP / BASE
查看>>
方法签名与方法重载
查看>>