关于汉诺塔自己的一点理解

关于汉诺塔自己的一点理解

首页休闲益智Tower of Hanoi 汉诺塔更新时间:2024-05-11

工作中遇到一些算法,深刻的体会到一个算法渣的尴尬,于是重新翻出了算法导论来抱佛脚,首先一个比较有意思的问题就是汉诺塔。

题干 :相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

首先:1个盘的时候很简单:

i .将A移动至C,over。

2个盘的时候:

i.(A->B) 将除了最大的盘之外的所有盘由A移动到B

ii.(A-C) 将A移动到C

iii.(B->C) 将B上的盘移动到C

3个盘的时候:

i.把除了最大的环之外的环,从A移动到B

A -> C

A -> B

C -> B

ii.将最大的环从A移动到C

A -> C

iii.把除了最大的环之外的环,从B移动到C

B -> A

B -> C

A -> C

N个盘的时候,同理首先将n-1个盘 到A->B,然后将最大的盘由A->C,最后,B->C,从而我们可以得出结论,可以将该问题抽象出来3个步骤。如图

1.将A中的n-1个盘借助C移动到B

2.将A中最大的盘移动到C

3.将B中的盘借助A移动C

如何用递归实现该问题了,很明显递归结束点就是当n=1的时候,一个盘子的时候直接将A移动到C :A->C

当n>1的时候,我们可以开始我们的第一层递归move(n-1,A,C,B) 该处实现的就是,将A上的n-1个盘子借助C移动到B

然后开始我们的第二层递归,move(n-1,B,A,C),将B上的n-1个盘子借助A移动到C,到这里我们工作算是完成了附上自己写的代码:

头条没有代码编辑工具我还是直接发截图吧:

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved