题目:
有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图)。
把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘
子始终保持大盘在下,小盘在上。
问题可以用递归思想来描述:
1.先将a座上的n-1盘子借助c座移动到b座;
2.再将a座最下面一个盘子移动到c座;
3.最后将b座的n-1个盘子借助a座移动到c座。
上述过程是把移动的n个盘子转化为n-1个盘子的问题,并且依次转化为n-2,n-3.......直到1个盘子的问题
所以可以用两个函数描述上述过程。
1.从底座上移动n个盘子到另一个底座
2.从底座上移动一个盘子到另一个底座
算法如下(java):
public class JavaApplication17 {
public static void main(String[] args) {
JavaApplication17 n=new JavaApplication17();
char a='a';
char b='b';
char c='c';
//n为盘子数量,a,b,c代表三个底座
n.Hanoi(n, a, b, c);
}
void Move(char chSour,char chDest){
System.out.println("Movew the top plate of"+chSour+"-->"+chDest);
}
void Hanoi(int n,char a,char b,char c){
if(n==1)
Move(a,c);
else
{
Hanoi(n-1,a,c,b);
this.Move(a, c);
Hanoi(n-1,b,a,c);
}
}
}