首页 > 技术文章 > 汉诺塔(Hanoi)

pengsay 2022-05-25 21:37 原文

百度百科

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
2020年8月3日,夏焱以33.039秒的成绩成功打破6层汉诺塔吉尼斯世界纪录。
2021年5月16日,中国龙岩的陈诺以29.328秒的成绩打破了6层汉诺塔吉尼斯世界纪录。

汉诺塔代码

package t2022.t5.t25.hanoi;

/**
 * @Author 14715
 * @Date 2022/5/25 20:41
 * @Version 1.0
 *
 * 汉诺塔
 */
public class Main {

    private static int cnt;

    public static void main(String[] args) {
        hanni('A', 'B', 'C', 10);
        System.out.println(cnt);
    }

    /**
     * 将在A柱子上的n个圆盘借助B柱子从A柱子移动到C柱子
     * @param A
     * @param B
     * @param C
     * @param n
     */
    public static void hanni(char A, char B, char C, int n) {
        if (n <= 0) {
            return;
        }
        // 首先将A柱子上的前n - 1个物块借助C柱子从A柱子移动到B柱子
        hanni(A, C, B, n - 1);

        // 然后直接将A柱子上的最后一个直接从A柱子移动到C柱子
        System.out.println(A + "柱子上第" + n + "个物块从" + A + "柱子直接移动到" + C + "柱子");

        // 累加移动次数
        cnt++;

        // 最后将在B柱子上的n - 1个物块借助A柱子从B柱子移动到C柱子
        hanni(B, A, C, n - 1);
    }
}

移动次数计算

2^n - 1(n为圆盘的总数量)

运行结果

 

 

推荐阅读