1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import java.util.Scanner; /** * 设有n个大小不等的中空圆盘,按照从小到大的顺序迭套在立柱A上(最上面是1号盘子),另有两根立柱B和C。现要求把全部圆盘从A柱(源柱)移到C柱(目标柱),移动过程中可借助B柱(中间柱)。移动时有如下的要求: ① 一次只许移动一个盘; ② 不允许把大盘放在小盘上边; ③ 可使用任意一根立柱暂存圆盘 输入说明: 一行一个整数n<=10 输出说明: 1从A到C 输入样例: 3 * @author Administrator * */ public class Main { /* * 个人解题思路: * 三个柱子可以理解成from temp to三个角色 * 问题的实质就是移动n个盘子时,如何将n-1从此时的from移动到temp,再将n移动到to,最后将temp上的n-1个盘子移动到to上 * 需注意:整个过程理解好三个柱子在各个过程内扮演什么角色 */ public static void main(String[] args) { System.out.println( "请输入需要移动的盘子:" ); Scanner scanner = new Scanner(System. in ); int n = scanner.nextInt(); scanner.close(); hanoi(n, "A" , "B" , "C" ); } private static void hanoi(int n, String from, String temp, String to) { if (1==n){ //1是整个递归的唯一出口,也是最简单的移动情形 System.out.println(n+ "从" +from+ "到" +to); } else { //将n-1个盘子从from移动到temp hanoi(n-1,from,to,temp); //将盘子n从from移动到to System.out.println(n+ "从" +from+ "到" +to); //将n-1个盘子从temp移动到to hanoi(n-1,temp,from,to); } } } |