规则:1.一次只能移动一个圆盘.
2.每个步骤都包括从一座塔中取出上部圆盘并将其放在另一座塔的顶部或空的柱子上.
3.不能将较大的圆盘放置在较小的圆盘上
2层:

3层:



可以观察到第3层中有一个状态与第2层类似

可以发现所有层数的汉诺塔都得先把 n - 1 层盘按从下到上,从大到小的顺序放置到 B 上,通过C把A上的 n - 1 个盘放到 B hanoi(n - 1, pos 1, pose 3, pose 2),然后把 A 上的最大的放到 C 上 move(pos1, pose2)。后续 n - 1次同理 把 B 上的 n - 1 个盘通过 A 放到 C 上 hanoi(n - 1,pos2, pos1, pos 3)
写成Java代码即为
import java.util.Scanner;
public class Test {
public static void move(char pos1, char pos2) {
System.out.println(pos1+" -> "+pos2+" ");
}
public static void hanoi(int n, char pos1 ,char pos2, char pos3) {
if(n == 1) {
move(pos1 , pos3);
return;
}
hanoi(n - 1, pos1, pos3, pos2);
move(pos1, pos3);
hanoi(n - 1,pos2 ,pos1, pos3);
}
public static void main(String[] args) {
//输入有几层汉诺塔
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
hanoi(n,'A','B','C');
//测试输入是否正确
//System.out.println(n);
}
}
欢迎大家在评论区交流
797

被折叠的 条评论
为什么被折叠?



