汉诺塔问题(java实现)

1.问题描述

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。


2.问题解析

假设有X,Y,Z三根柱子,现将X上的圆盘移动至Z盘,期间可以借助Y盘。

  1. 若只有一个圆盘,只需将其从x盘移动至z盘即可。
  2. 若有多个圆盘,则先将前n-1个圆盘从X盘移动到Y盘,再将第n个圆盘从X移动到Z盘;然后对于Y中n-1个盘的移动问题与问题本身的分析类似,只是将Y盘上的圆盘移动至Z盘,期间可以借助X盘。

3.代码

public class Tower_of_Hanoi {

    static int i=0;

    public static void move(int n,String x,String y,String z){
        if(n==1){
            i++;
            System.out.println("将"+n+"从"+x+"移动到"+z);
        }else{
            move(n-1, x, z, y);
            System.out.println("将"+n+"从"+x+"移动到"+z);
            i++;
            move(n-1, y, x, z);
        }
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner s=new Scanner(System.in);
        System.out.print("请输入移动的个数:");
        String chaXun=s.next();
        try{
            int count=Integer.parseInt(chaXun);
            Tower_of_Hanoi.move(count, "X", "Y", "Z");
            System.out.println("一共需要移动的次数为:"+i);
        }catch(Exception e){
            System.out.println("请输入数字!");
        }
    }
}

4.结果

请输入移动的个数:5
将1从X移动到Z
将2从X移动到Y
将1从Z移动到Y
将3从X移动到Z
将1从Y移动到X
将2从Y移动到Z
将1从X移动到Z
将4从X移动到Y
将1从Z移动到Y
将2从Z移动到X
将1从Y移动到X
将3从Z移动到Y
将1从X移动到Z
将2从X移动到Y
将1从Z移动到Y
将5从X移动到Z
将1从Y移动到X
将2从Y移动到Z
将1从X移动到Z
将3从Y移动到X
将1从Z移动到Y
将2从Z移动到X
将1从Y移动到X
将4从Y移动到Z
将1从X移动到Z
将2从X移动到Y
将1从Z移动到Y
将3从X移动到Z
将1从Y移动到X
将2从Y移动到Z
将1从X移动到Z
一共需要移动的次数为:31


5.备注

有问题的地方还请各位多多包含,不吝赐教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值