汉诺塔问题

共有三根柱子,在一根柱子上从下往上按照大小顺序进行排放圆盘,并且要重新移动到另一个柱子上,并且规定,小圆盘上不可以摆放大圆盘,在三根柱子之间,一次只能移动一个圆盘

步骤均在代码中有标注

class H {
    public void move(int num,char a,char b,char c){//num表示要移动的个数,a,b,c分别表示A塔,B塔,C塔
if(num==1){//假如只有一层
    System.out.println(a+"->"+c);//输出直接从a移动到c
}else{
    //第一步
    move(num-1,a,c,b);//将所有的汉诺塔看成两层,最后一层,上面的层数全部看为一层,共看作两层;这一步是将上面的层数(num-1)从a层移动到b层,要借助c层
    //第二步
    System.out.println(a+"->"+c);//将最后一层直接从a层移动到c层
    //第三步
    move(num-1,b,a,c);//最后将上面的层数(num-1)再从b层移动到c层,要借助a层,从而完成交换
}
    }
}
public class HanLuoTa {
    public static void main(String ags[]){
        H h=new H();
        h.move(5,'A','B','C');//这里的5可以随意变化
    }

}

测试结果 以5层为例:

A->C
A->B
C->B
A->C
B->A
B->C
A->C
A->B
C->B
C->A
B->A
C->B
A->C
A->B
C->B
A->C
B->A
B->C
A->C
B->A
C->B
C->A
B->A
B->C
A->C
A->B
C->B
A->C
B->A
B->C
A->C

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值