据结构(三)-- 用栈实现汉诺塔(python)

2023-11-07

《数据结构C语言版》P55

算法思想:

  为了把n块盘从X塔座移到Z塔座借助Y塔座,就必须把n-1块盘从X塔座移到Y塔座借助Z塔座,再将X塔座上剩余的第n块盘移到Z塔座上,最后将Y塔座上的n-1块盘移到Z塔座上借助X塔座,结束程序。
  而在实现将n-1块盘从X塔座移到Y塔座借助Z塔座时,又必须先实现将n-2块盘从X塔座上移到Y塔座上,借助Z塔座,再将第n-2块盘从X塔座上移到Z塔座上,最后将Y塔座上的n-2块盘移到Z塔座上借助X塔座。
  从而形成递归。

python3

class Solution:
    def hanoi(self, n, x, y, z):  # 将n块盘从x盘移到z盘借助y盘
        if n == 1:
            self.move(x, 1, z)
        else:
            self.hanoi(n-1, x, z, y)  # 将n-1块盘从x盘移到y盘借助z盘
            self.move(x, n, z)  # 将第n块盘从z移到z
            self.hanoi(n-1, y, x, z)  # 将n-1块盘从y盘移到z盘借助x盘

    def move(self, a, n, b):  # 将第n号盘从a移到b
        a.pop()
        b.append(n)
        print('将第' + str(n) + "块圆盘从" + a[0] + '移到' + b[0])

if __name__ == '__main__':
    x = ['a']
    r = [i for i in range(1, 4)]
    x.extend(r)
    y = ['b']
    z = ['c']
    t = Solution()
    t.hanoi(3, x, y, z)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

据结构(三)-- 用栈实现汉诺塔(python) 的相关文章

随机推荐

  • 扫描效果图像增强

    原文 https blog csdn net pleasecallmewhy article details 8776998 感谢 机器视觉 图像算法 https home cnblogs com u cvdream 没有扫描仪怎么办 可以
  • FreeBSD12.1系统安装完成后配置ssh远程连接

    默认情况下 freebsd12 1系统安装完之后 是禁止root通过ssh远程登录的 freebsd12 1只允许普通用户通过ssh登录 这可能也是官方推荐的做法 相对来说更加安全 但xshell工具无法用普通用户通过ssh远程连接 需要开
  • 开机直接进入该应用作为默认launcher(霸屏)或者开机自启指定应用

    开机默认此app作为launcher首次加载 就是设置这个apk为开机向导 并没有设置这个成默认launcher 若此应用是launcher应用那么按返回之后会提示让你选择哪一laucher前提是此应用内置并没有作为launcher应用 就
  • 交换两个数整有几种途径

    原本以为利用变量或者异或可以交换两个整数 今天学到 加减也可以实现两个整数的交换 本笔记适合熟悉一种编程语言的 coder 翻阅 学习的细节是欢悦的历程 Python 官网 https www python org Free 大咖免费 圣经
  • 出现ModuleNotFoundError: No module named ‘pydotplus‘的解决方法

    目录 问题描述 解决方法 安装对应的pydotplus安装包 总结 问题描述 出现ModuleNotFoundError No module named pydotplus 的解决方法 解决方法 安装对应的pydotplus安装包 cond
  • linux glob函数man页与实例

    Linux Programmer s Manual NAME glob globfree find pathnames matching a pattern free memory from glob SYNOPSIS include
  • 数据结构之映射表(Map)---第一篇---用链表实现

    一 映射表 Map 简介 映射表是一种依照键 值对存储元素的容器 又称字典 directory 散列表 hash table 映射表将键和值一起保存 键类似于数组中的下标 不能有重复的键 每个键对应一个值 键和它对应的值构成一个条目 二 链
  • java.lang.UnsatisfiedLinkError: Native method not found 三种可能解决

    http blog csdn net lilu leo article details 10950047 so文件编译生成后 运行时 有时候会遇到Java lang UnsatisfiedLinkError Native method no
  • openssh7.4p升级到9.0p

    目录 1 前言 2 安装前准备 2 1 启用telnet 2 2 建立备份目录 3 3 安装依赖环境 3 升级openssl 3 1 备份文件 3 2 编译安装openssl 4 升级openssh 4 1 安装zlib 4 2 备份文件
  • stm32毕设 智能窗户系统(源码+硬件+论文)

    文章目录 0 前言 1 主要功能 2 硬件设计 原理图 3 核心软件设计 4 实现效果 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学
  • 实现一个任务调度系统,这篇文章就够了

    阅读一篇 定时任务框架选型 的文章时 一位网友的留言电到了我 我看过那么多所谓的教程 大部分都是教 如何使用工具 的 没有多少是教 如何制作工具 的 能教 如何仿制工具 的都已经是凤毛麟角 中国 软件行业 缺的是真正可以 制作工具 的程序员
  • 全面解读算法时间复杂度

    衡量一个算法优劣的标准 在信息学奥赛中 一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量 由于近年来信息学奥赛比赛题目中空间要求逐渐增大 因此 更多的是关心程序的时间复杂度 当追求一个较好的时间复杂度时 可能会使空间复杂
  • Stable Diffusion中ControlNet和OpenPose的安装教程

    ControlNet 是一种神经网络结构 通过添加额外条件来控制扩散模型 它将神经网络块的权重复制到 锁定 副本和 可训练 副本中 可训练 的人会了解您的病情 锁定 的模型将保留您的模型 因此 使用图像对的小数据集进行训练不会破坏生产就绪的
  • 讲解Linux中samba理论讲解及Linux共享访问

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 目录 前言 一 samba基本概念 二 Samb
  • vue3(hooks)

    vue3的hooks相当于是封装公共方法的js文件 计数器 方法的hooks文件 import ref from vue export default function const counter ref 0 const increment
  • SPSS数据分析前,异常值处理

    转载来源 http bbs pinggu org thread 1542766 1 1 html h请教一个问题 在一组测量数据中 有几百个 剔除异常值 是采用 平均值 3倍标准差 的方法 为什么在进行异常值剔除后的数据中进行检验 还是有异
  • Linux(ubuntu、centos): kex_exchange_identification: Connection closed by remote host

    一 连接服务器报错 今天我在连接我的Ubuntu服务器的时候 发现连不上 报下面这个错误 net schmizz sshj transport TransportException Server closed connection duri
  • 地产变革中,物业等风来

    2023年7月 也许是中国房地产行业变局中的一个大拐点 中信建投研报表示 政治局会议指出当前我国房地产形势已发生重大变化 要适时调整优化政策 为行业形势定调 当前房地产行业 已至 不久前 国家统计局公布了2023年上半年房地产数据 数据显示
  • Git:重新提交没有更新的commit

    应用场景 一般来讲 我们push一个commit的流程是这样的 git add
  • 据结构(三)-- 用栈实现汉诺塔(python)

    数据结构C语言版 P55 算法思想 为了把n块盘从X塔座移到Z塔座借助Y塔座 就必须把n 1块盘从X塔座移到Y塔座借助Z塔座 再将X塔座上剩余的第n块盘移到Z塔座上 最后将Y塔座上的n 1块盘移到Z塔座上借助X塔座 结束程序 而在实现将n