话说"汉诺塔"--成功与否只是第一步--非递归解
2010-01-21 23:11
260 查看
小时候玩过汉诺塔,不过当时比较蠢,并且也没有哪个耐力在那里挪来挪去。应该是大一,C语言中递归函数时候第一次接触了用程序解决这个问题。那时候感觉这个东西有点玄妙,毕竟自己是个"C鸟",再加上自己本来就不熟悉,弄得蛮纠结。确切的说知道现在我还没有运行过这个程序,不过昨天看了一下,发现了一个不用递归就能够解决的方法。
总之,汉诺塔能否成功玩出就只是第一步决定的。
这个想法是根据递归的汉诺塔解法发现的规律,假设柱子有三A,B,C,现在要将N个盘子从A移到C,这是个简单的描述。那么我们递归的解决应该是:如果先把N-1个盘子从A移到B那我就可以完成剩下来的一步了。这不就把责任推给别人了吗?接着我们要将N-1个盘子从A移动到B那只需要将N-2这盘子从A移动到C,好了,到这里我们的解出来了。原来N的操作和N-2的操作时同一个性质的,所以我们能够得出结论:任何N的移动规则都是与N%2的移动规则相同的,也就是说,如果N是奇数那么移动和1个盘子情况相同,如果为偶数移动和2个盘子相同。如果该柱子盘子数目为奇数将盘子直接移动到最终要去的柱子,如果该柱子盘子数目为偶数将盘子先移动到另外的一个柱子。如果是从上开始一步一步迭代的话,需要有一个环节,每移动1个盘子就要把所有比他小的盘子移动到它的上面。这样子循环进行就能得到正确步法。
这个程序实现起来感觉应该不是很困难,三个栈作为辅助空间差不多就可以了,每次移动之后,窥探各个栈中小余该盘子的盘子然后弹出到队列以同样的判断方式(奇数偶数)决定,出栈盘子走向。不过就是有点复杂,不过跟人吹牛说自己连想都不想就能够出十多个盘子的就没什么问题了!
据我不完全统计,貌似没什么错。可能比较小儿科,不过感觉这也算是饭后的甜点,乐呵乐呵罢了。
欢迎高手拍砖指教,小弟还是个"鸟" !
转载请注明出处!
总之,汉诺塔能否成功玩出就只是第一步决定的。
这个想法是根据递归的汉诺塔解法发现的规律,假设柱子有三A,B,C,现在要将N个盘子从A移到C,这是个简单的描述。那么我们递归的解决应该是:如果先把N-1个盘子从A移到B那我就可以完成剩下来的一步了。这不就把责任推给别人了吗?接着我们要将N-1个盘子从A移动到B那只需要将N-2这盘子从A移动到C,好了,到这里我们的解出来了。原来N的操作和N-2的操作时同一个性质的,所以我们能够得出结论:任何N的移动规则都是与N%2的移动规则相同的,也就是说,如果N是奇数那么移动和1个盘子情况相同,如果为偶数移动和2个盘子相同。如果该柱子盘子数目为奇数将盘子直接移动到最终要去的柱子,如果该柱子盘子数目为偶数将盘子先移动到另外的一个柱子。如果是从上开始一步一步迭代的话,需要有一个环节,每移动1个盘子就要把所有比他小的盘子移动到它的上面。这样子循环进行就能得到正确步法。
这个程序实现起来感觉应该不是很困难,三个栈作为辅助空间差不多就可以了,每次移动之后,窥探各个栈中小余该盘子的盘子然后弹出到队列以同样的判断方式(奇数偶数)决定,出栈盘子走向。不过就是有点复杂,不过跟人吹牛说自己连想都不想就能够出十多个盘子的就没什么问题了!
据我不完全统计,貌似没什么错。可能比较小儿科,不过感觉这也算是饭后的甜点,乐呵乐呵罢了。
欢迎高手拍砖指教,小弟还是个"鸟" !
转载请注明出处!
相关文章推荐
- linux下wine安装成功后运行不了 err:process:init_windows_dirs directory L"C://windows
- 成功解决问题[Fatal Error] test.xml:1:7: The processing instruction target matching "[xX][mM][lL]" is not allowed.
- header("location:test.php")跳转成功需要注意的
- sql server 2005 连接不到服务器 "已成功与服务器建立连接,但是在登录前的握手期间发生错误"问题解决方案
- 友情"只是偶然相逢"
- "产品测试管理&敏捷项目管理"研讨会在深圳成功举办!
- 设置ip及dns过程中,形如"192.001.000.020"设置不成功,需转换为"192.1.0.20"
- 第一步,我想我总算找到用Matlab计算"卷积"以及,进行"可逆"的"解卷积"的途径了
- "<item> tag requires a 'drawable' attribute"-selector设置颜色不成功-解决方案
- 再论"业余"和"专业"--致力职业化 提高成功力
- 由"看欧巴马如何用IT成功行销自己"谈整合性平台的重要
- _tprintf(_T("PDF转换成功\n")); 无法输出中文字符
- 再论"业余"和"专业"--致力职业化 提高成功力
- 话说"三字经"(想看却没时间去找来看的经典书籍)
- 好几条记录只是仓位及数量不同,其它内容都一样,现在要显示出一条来,仓位及数量用"/"分开
- 发布网站成功后,上传到服务器后,IE中出现错误"服务器应用程序不可用"
- 1#include<stdio.h> #include<string.h> int deng(char a[],ch、用函数实现登陆功能(三次机会),然后在主函数中根据调用后的结果判断 登陆成功与否。
- javascript 计算及倒计时 溫馨提示:登入成功後最少30秒才統計一次流覽數量,您已经登陆 "+minutes+" 分 "+seconds+" 秒
- Ubuntu安装eclipse和pydev成功后,新建项目输入项目名的时候出现"Project interpreter not specified"的错误
- 再论"业余"和"专业"--致力职业化 提高成功力