多柱汉诺塔问题“通解”——c++
多柱汉诺塔问题
绪言
有位同学看到了我的初赛模拟卷上有一道关于汉诺塔的数学题。大概就是要求4柱20盘的最小移动次数。
他的数学很不错,找到了应该怎样推。
如果要把n个盘子移到另一个柱子上,步骤如下:
- 把一部分盘子(靠上的r个)移到一根空柱子上,移动过程中可用的柱子有4根
- 将剩下的n-r个盘子移到另一根空柱子上,移动过程中可用的柱子为3根(这n-r个盘子都不能放在放有前r个盘子的柱子上)
- 将第一步移动的r根柱子移到n-r个盘子上方,移动过程中可用的柱子有4根
其实,他说的就是多柱汉诺塔的Frame-Stewart算法的m=4时的情况
Frame-Stewart算法
设原来有n个盘子,m个柱子
把一部分盘子(靠上的r个)移到一根空柱子上,移动过程中可用的柱子有m根
将剩下的n-r个盘子移到另一根空柱子上,移动过程中可用的柱子为m-1根(这n-r个盘子都不能放在放有前r个盘子的柱子上)
将第一步移动的r根柱子移到n-r个盘子上方,移动过程中可用的柱子有m根
推导式
设Fm(n)=有m个柱子,n个盘子所需要移动的最小步数。
则
Fm(n)=min0<r<n{2*Fm(r)+Fm-1(n-r)}
那么这个r到底是多少呢?
那就要来枚举咯……
代码
多柱汉诺塔问题“通解”——c++的更多相关文章
- 4柱汉诺塔(zz)
多柱汉诺塔可以用Frame–Stewart算法来解决. The Frame–Stewart algorithm, giving a presumably optimal solution for fo ...
- hdu 1207 四柱汉诺塔
递推,汉诺塔I的变形. 这题真心没想到正确解法,越想越迷糊.这题看了别人题解过得,以后还是自己多想想,脚步太快并非好事. 贴上分析: 分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]= ...
- The Towers of Hanoi Revisited---(多柱汉诺塔)
Description You all must know the puzzle named "The Towers of Hanoi". The puzzle has three ...
- 四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼
我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子. 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸.先来看看经典的三柱汉诺塔. 一.三柱汉诺塔(Hanoi_Thr ...
- 汉诺塔的问题:4个柱子,如果塔的个数变位a,b,c,d四个,现要将n个圆盘从a全部移到d,移动规则不变
四柱汉诺塔问题的求解程序.解题思路:如a,b,c,d四柱. 要把a柱第n个盘移到目标柱子(d柱),先把上层 分两为两部份,上半部份移到b柱,下半部分移到c柱,再把第n盘移到 目标柱子,然后,c柱盘子再 ...
- HDU汉诺塔系列
这几天刷了杭电的汉诺塔一套,来写写题解. HDU1207 汉诺塔II HDU1995 汉诺塔V HDU1996 汉诺塔VI HDU1997 汉诺塔VII HDU2064 汉诺塔III HDU2077 ...
- [递推]B. 【例题2】奇怪汉诺塔
B . [ 例 题 2 ] 奇 怪 汉 诺 塔 B. [例题2]奇怪汉诺塔 B.[例题2]奇怪汉诺塔 题目描述 汉诺塔问题,条件如下: 这里有 A A A. B B B. C C C 和 D D D ...
- codevs3145 汉诺塔问题
难度等级:白银 3145 汉诺塔问题 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一 ...
- BZOJ 1019: [SHOI2008]汉诺塔
Description 一个汉诺塔,给出了移动的优先顺序,问从A移到按照规则移到另一个柱子上的最少步数. 规则:小的在大的上面,每次不能移动上一次移动的,选择可行的优先级最高的. Sol DP. 倒着 ...
随机推荐
- mvc jQuery 点击按钮实现导出Excel功能 参数长短不限
var exportSubmit=function(url, obj){ var form = $("<form>"); //定义一个form表单 form.attr( ...
- 遍历CSDN博客
--http://blog.csdn.net/leixiaohua1020/article/list/14?viewmode=contents function saveData(data) loca ...
- 如何在网页读取用户IP,操作系统版本等数据demo
我们浏览网页的时候,会不经意间看到,有些地方(如个人的签名档)显示出了个人的IP,操作系统等数据.借助第三方API和请求报头useragent是很容易实现的. <html> <hea ...
- HDU_1394_线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1394 线段树入门题,每次读入一个数,就寻找在树中比它大的值的个数,然后更新树,把个数相加就是逆序数,每移动一个数 ...
- HDU_3652_数位dp
http://acm.hdu.edu.cn/showproblem.php?pid=3652 cal(a,b,c,d),a表示当前位置,b表示是否有13的3种状态,c表示前面的数%13后的剩余,d表示 ...
- Codeforces_712_B
http://codeforces.com/problemset/problem/712/B 水,判断奇偶即可. #include<iostream> #include<string ...
- java2变量数据类型和运算符
public class jh_11_加加减减运算符 { public static void main(String[] args) { int a = 5,b =2 ; a ++;// 对自身 ...
- Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)
957. N 天后的牢房 思路: 模拟变换,当N天结合后返回 => 当N非常大的时候,超时 => 一般N很大的时候,这种题目必然存在循环,所以记录找过的状态,一旦出现已经访问过的状态可立即 ...
- space transport protocols
VSAT系统对TCP的改进 https://www.vsat-systems.com/broadband-satellite-internet/index.html TCP/IP over satel ...
- git知识简单小结
git特点: 1)分布式 2)存储快照而非差异 3)本地有完全的版本库,几乎所有操作都在本地 4)有内在的一致性,SHA1 5)优秀的分支管理 6)支持各种协同模式 7)开源,有一些第三方软件可整合使 ...