public static void move(char pos1 ,char pos2) {
//模拟实现盘子的移动
//pos1移动到pos2,这里pos1、pos2只是一个代指
// 比如你想移动A上方的一个盘子到C,你传参就是pos1=A,pos2=B
System.out.print(pos1+"->"+pos2+" ");
}
public static void hanNuoTa(int n,char pos1 ,char pos2,char pos3) {
//n表示要移动的盘子个数
//pos1起始位置、pos2中转位置、pos3目标位置
//因为移动过程中,目标位置、中转位置是会变的
if(n==1)
{
move(pos1,pos3);
}
else
{
hanNuoTa(n-1,pos1,pos3,pos2);
//起始位置移动n-1个到中转位置
move(pos1,pos3);//n-1个移动完,将起始位置最大的1个移动到目标位置
//问题转换成:pos2是起始位置,pos3目标位置,pos1中转位置,如何将n-1个盘,从pos2移动到pos3
hanNuoTa(n-1,pos2,pos1,pos3);
}
}
public static void main(String[] args) {
hanNuoTa(1,'A','B','C');
System.out.println();
hanNuoTa(2,'A','B','C');
System.out.println();
hanNuoTa(3,'A','B','C');
System.out.println();
hanNuoTa(4,'A','B','C');
System.out.println();
}
用Java解决汉诺塔问题
最新推荐文章于 2023-09-17 11:42:39 发布