汉诺塔问题(java实现)

问题:

据说古代印度还是埃及有个塔叫做波罗教塔(汉诺塔),上面有三根钻石石柱(真TM有钱)。神说在第一根上面有小到大放上64个金色盘子,命令那些奴才们从第一根移动到第三根上面,搬运中必须遵守大盘在小盘下面的规矩。每天只能搬动一个,等全把盘子搬到第三个上面的时候,这个塔就崩了。。世界就灭亡了。。。让你求一求这个世界末日
这个是用递归,看网上的解释也很迷茫,自己思考了一下,大概是这么回事。第一根柱子A,第二根柱子B,第三根柱子C。A上面有N个盘子,这里先要借助B为过渡,把N-1个盘子移动到B上,再把第N个盘子移到C上去。然后以A为过渡,把N-2个盘子移到A上去,第N-1个移动到C上去,依次往下。。。。等N=1的时候,直接把盘子丢给C就好了。
代码如下:

package per.lihao.recursion;

/**
 * Author: LiHao
 * Time: 2018/12/5 15:34
 */
public class HanoiTower {
    public static void move(int num,String from,String to){
        System.out.println("move "+String.valueOf(num)+" from "+from+" to "+to);
    }
    public static int swap(int num,String a, String b,String c){
        int count = 0;
        if (num==1){
            move(num,a,c);
        }
        else {
            int n1 = swap(num-1,a,c,b);
            move(num,a,c);
            int n2 = swap(num-1,b,a,c);
            count += n1+n2+1;
        }
        return count;
    }

    public static void main(String[] args) {
        String A="A",B="B",C="C";
        int num=3;
        int p=swap(num,A,B,C);
        System.out.println("final total num is :"+String.valueOf(p));
    }
}

参考文献

1.汉诺塔C++版

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值