递归与动态规划---汉诺塔问题
来源:互联网 发布:linux内核编译详解 编辑:程序博客网 时间:2024/06/16 22:59
【问题】
给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上,实现函数打印最优移动轨迹。
【举例】
n = 2时,打印:
move from left to mid
move from left to right
move from mid to right
【基本思路】
假设有left柱子,mid柱子和right柱子,都在left柱子的圆盘1~i完全移动到right,最优的过程为:
- 将圆盘1~i-1从left移动到mid
- 将圆盘i从left移动到right
- 将圆盘1~i-1从mid移动到right
如果盘子只有一个,直接从left移动到right即可
下面是使用python3.5实现的代码
#汉诺塔问题def hanoi(n): def func(n, left, mid, right): if n == 1: print("move from " + left + " to " + right) else: func(n-1, left, right, mid) func(1, left, mid, right) func(n-1, mid, left, right) if n < 1: return return func(n, "left", "mid", "right")
阅读全文
2 0
- 递归与动态规划---汉诺塔问题
- 递归/动态规划问题
- 递归与动态规划
- 递归与动态规划
- 递归与动态规划---龙与地下城游戏问题
- 同一问题的递归与动态规划解法
- 递归分治与动态规划--上台阶的问题
- 递归与动态规划---最长递增子序列问题
- 递归与动态规划---最长公共子序列问题
- 递归与动态规划---最长公共子串问题
- 递归与动态规划关系
- 动态规划与递归非递归
- 递归与动态规划---斐波那契系列问题的递归,动态规划与矩阵乘法
- 动态规划算法求解找硬币问题的递归与非递归实现
- 递归与动态规划---N皇后问题的递归方法和位运算方法
- 整数划分问题---动态规划、递归
- 整数划分问题---动态规划、递归
- 背包问题---递归及动态规划
- JavaScript权威指南读书笔记——第七章 数组
- Use VS2017 C# 7.0 to accelerate async code
- 关于HTML form accept-charset 属性的若干尝试
- 处理阶乘及阶乘逆元的小技巧
- ImageLoader 图片加载框架
- 递归与动态规划---汉诺塔问题
- centos7安装ansible遇到的问题
- 金蝶K3 SQL报表系列-库存账龄分析
- 1003. 我要通过!(20)
- 计算机中叉积
- 一句话就kill掉所有Java进程
- C语言 字符串和C++ string对象的相互转化
- 读书笔记:SQL必知必会【第1-3课】
- [HAOI2007]理想的正方形