ITPub博客

首页 > 应用开发 > Java > 汉诺比塔算法

汉诺比塔算法

原创 Java 作者:longer3281 时间:2024-04-22 19:35:42 0 删除 编辑

Java实现汉诺塔算法的代码:

public class HanoiTower {

    public static void main(String[] args) {

        int n = 3; // 设置盘子数量

        doTowers(n, 'A', 'B', 'C');

    }


    public static void doTowers(int topN, char from, char inter, char to) {

        if (topN == 1) {

            System.out.println("Disk 1 from " + from + " to " + to);

        } else {

            doTowers(topN - 1, from, to, inter);

            System.out.println("Disk " + topN + " from " + from + " to " + to);

            doTowers(topN - 1, inter, from, to);

        }

    }

}


代码解释:

  1. HanoiTower是主类。
  2. main方法是程序入口,设置了初始盘子数量 n为3,然后调用 doTowers方法开始移动盘子。
  3. doTowers方法是实现汉诺塔算法的核心。它接收四个参数:
    • topN表示当前需要移动的盘子数量。
    • from表示盘子的起始柱子。
    • inter表示中介柱子,用于临时存放盘子。
    • to表示目标柱子,即需要将盘子移动到的位置。
  4. 在 doTowers方法中,有以下两种情况:
    • 如果只有一个盘子( topN == 1),直接将盘子从起始柱子移动到目标柱子,打印移动信息。
    • 如果有多个盘子( topN > 1),则先递归调用 doTowers将上面的 topN-1个盘子从起始柱子借助目标柱子移动到中介柱子,然后将最大的盘子直接从起始柱子移动到目标柱子,再递归调用 doTowers将中介柱子上的 topN-1个盘子借助起始柱子移动到目标柱子。


运行结果(n=3):

Disk 1 from A to C

Disk 2 from A to B

Disk 1 from C to B

Disk 3 from A to C

Disk 1 from B to A

Disk 2 from B to C

Disk 1 from A to C


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9606353/viewspace-3013372/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
数据库架构师,DB从业经历 DB2,Oracle,MySQL,PGSQL,MonogDB 等数据库,hadoop,hive,spark,flink,doris等大数据技术。

注册时间:2009-05-22

  • 博文量
    69
  • 访问量
    185398