汉罗塔问题(通俗易懂版!!!)

一、 汉罗塔问题的介绍

1.文字介绍

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

2.图形介绍

在这里插入图片描述
在这里插入图片描述

二、汉罗塔问题的编程思想

1.思路简述

以两个盘子为例
1转移柱上移到辅助柱
2转移柱上移到目标柱
1辅助柱上移到目标柱
同理我们可以推出:
如果转移柱A上有n个盘子,
我们将(n-1)个盘子从转移柱移到辅助柱
然后我们将 1 个盘子转移柱移到目标柱
最后将(n-1)个盘子辅助柱移到目标柱
在这里插入图片描述

下面我们以三个盘子为例检测一下上述推断是否正确

在这里插入图片描述

由上图可知此时的递归公式是正确的,到这里大家就可以自己完成代码实现了!
我自己写的代码也在下面贴出来了,大家可以以此作为参考!

2.代码实现

//num表示需要转移的个数
//n表示转移盘子的序号
//move表示转移柱
//auxi表示辅助柱
//targ表示目标柱
public static void hanoi(int num,int n,char move,char auxi,char targ){
    
    
    if(num-1==0){
    
    
        System.out.println("将"+n+"从"+move+"移到"+targ);
    }else{
    
    
        hanoi(num-1,n-1,move,targ,auxi);
        hanoi(1,n,move,auxi,targ);
        hanoi(num-1,n-1,auxi,move,targ);
    }
}
    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入需要转移的盘子个数:");
        int num= scanner.nextInt();

        System.out.println("现在开始模拟"+n+"个盘子从A柱转移到C柱的过程:");
        hanoi(num,num,'A','B','C');

    }
}

最后希望这篇文章对你有所帮助!!!

猜你喜欢

转载自blog.csdn.net/2401_82641862/article/details/138399117