作者chenbojyh (阿志)
看板Grad-ProbAsk
标题Re: [商管] [资结]-河内塔
时间Tue Aug 25 23:05:30 2009
※ 引述《yesa315 (XD)》之铭言:
: ※ 引述《fairwarning (一轮明月与蓝夜!!)》之铭言:
: : 请问河内塔的recursive algorithm
: void Hanoi (n:disc,A,B,C:peg) 目标:把n个盘子从A柱般到C柱 搬动时大盘
: 要在小盘下方
: : {
: : if(n==1)
: {
: move disc from A to C //只有一个盘子时 直接搬到C柱
: : }
: : else //大於1个盘子 需递回搬动盘子
: : {
: Hanoi(n-1,A,C,B); //先把放在A柱前面n-1个盘子搬到B柱 并且以C当作为搬动时
: //可以当作暂时放置盘子的地方
: move the disc n from A to C; //最後一个在A的最大盘子 直接搬到C柱
: Hanoi(n-1,B,A,C); //把放在B柱n-1个盘子搬到C柱 并且以A当作为搬动时
: //可以当作暂时放置盘子的地方
: : }
: : }
图形补充 以 n=3 为例
A B C
| | |
=|= | |
==|== | |
===|=== | |
******************* ******************* *******************
Move Disk 1 From A to C ;
| | |
| | |
==|== | |
===|=== | =|=
******************* ******************* *******************
Move Disk 2 From A to B ;
| | |
| | |
| | |
===|=== ==|== =|=
******************* ******************* *******************
Move Disk 1 From C to B ;
| | |
| | |
| =|= |
===|=== ==|== |
******************* ******************* *******************
Move Disk 3 From A to C ;
| | |
| | |
| =|= |
| ==|== ===|===
******************* ******************* *******************
Move Disk 1 From B to A ;
| | |
| | |
| | |
=|= ==|== ===|===
******************* ******************* *******************
Move Disk 2 From B to C ;
| | |
| | |
| | ==|==
=|= | ===|===
******************* ******************* *******************
Move Disk 1 From A to C ;
| | |
| | =|=
| | ==|==
| | ===|===
******************* ******************* *******************
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.227.133.81
1F:推 jjkkwsr:太威了XD 08/26 10:44