汉诺塔问题大家都知道是什么情况,题目描述就没什么好说的了
关键点:如何拆分子问题
1. 我们可以把题目抽象成这样:借助B,将A的块移动到C上
2. 我们可以认识到这样一个问题,最大的块(蓝色)其实是可以从问题中暂时摘除的,因为它在哪都是处于最底层,它上面可以放任何块,它和底座没啥区别。
3. 理解这样一个过程:把红色块和橙色块借助C移动到B,该过程和我们的整体过程是一致的,只是规模较小
4. 上述过程完成后,就只剩把蓝色块再移动到C了
5. 而当蓝色块移动完成后,根据2中的描述,我们可以认为蓝色块已经可以退出这个舞台了,接下来的问题就是把红色、橙色块借助A移动到C,这就是原问题的N-1的规模
代码也非常简单
public static void hanoi(int n,char a, char b, char c) {
if (n == 1) {
System.out.println(a+"-->"+c);
return;
}
hanoi(n-1,a,c,b);
System.out.println(a+"-->"+c);
hanoi(n-1,b,a,c);
}
输出:
a-->c
a-->b
c-->b
a-->c
b-->a
b-->c
a-->c