Re: [商管] [資結]-河內塔
※ 引述《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
推
08/26 10:44, , 1F
08/26 10:44, 1F
討論串 (同標題文章)