最近复习数据结构,看到了以前的一道期中考试题,hanoi塔问题。简述思路:
假设有3个柱子a,b,c。同时只有3个盘子1、2、3,在柱子a上,现在想把盘子全部转移到柱子c上。(第一次发博客,不会排版)
方法:一、把盘子1从柱子a放到柱子c上
二、把盘子2从柱子a放到柱子b上
三、把盘子1从柱子c放到柱子b上
四、把盘子3从柱子1放到柱子c上
五、把盘子1从柱子b放到柱子a上
六、把盘子2从柱子b放到柱子c上
七、把盘子1从柱子a放到柱子c上
简化之后:一、把盘子1和2从柱子a放到柱子b上
二、把盘子3从柱子1放到柱子c上
三、把盘子1和2从柱子b放到柱子c上
至此全部转移完成。
(假设有n个盘子)思路:还是用递归的方法
一、把n-1个盘子从柱子a移到柱子b上
二、把第n个盘子从柱子a移到柱子
三、把n-1个盘子从柱子b移到柱子c上
n=0时结束代码
public class MoveHanoi {
public static void main(String[] args) {
move('a', 'b', 'c', 3);
}
public static void move(char a, char b, char c, int n) {
if(n == 0) {
return;
}
move(a, c, b, n-1);
System.out.println("把盘子"+n+"从柱子"+a+"移到柱子"+c+"上");
move(b, a, c, n-1);
}
}
结果: