汉诺塔问题的描述如下:有A、B和C 3跟柱子,在A上从下往上按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。本实例将演示如何求解3阶汉诺塔问题。
package _07_第七章常见算法;
import java.util.Scanner;
public class C201_07_07汉诺塔问题 {
public static void main(String[] args) {
//移动n个盘子从A到C
//1.移动n-1个盘子 借助C 从 A到 B
//2.把第n个盘子 从A直接到 C
//3.把n-1 把B 借助A 移动到 C.
System.out.printf("请输入盘子的数量:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
//将n个盘子 从A柱 借助B 移动到C
hanoi(n,'A','B','C');
}
/**
* 移动n个盘子
* @param n 盘子数
* @param a 源柱
* @param b 辅助柱
* @param c 目标柱
*/
private static void hanoi(int n, char a, char b, char c) {
if (1 == n){
System.out.printf("%c -> %c\n",a,c);
}else {
hanoi(n-1,a,c,b);
System.out.printf("%c -> %c\n",a,c);
hanoi(n-1,b,a,c);
}
}
}
请输入盘子的数量:3
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
请输入盘子的数量:4
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C