汉诺塔问题

汉诺塔问题是法国数学家Edouard Lucas发明的。具体可以描述为有三根木桩,初始的时候有n个盘子,最底层的盘子最大,最上层的盘子最小,按大小顺序依次放在第一根木桩上,然后以第二根木桩作为桥梁,全部搬到第三根木桩。

移动木桩的时候需要注意:
1.每次只能移动一个盘子。
2.大盘子必须放在小盘子下面。

基本算法思想:
1.将n-1个盘子,从木桩1移到木桩2。
2.将第n个盘子,从木桩1移到木桩3。
3.将n-1个盘子,从木桩2移到木桩3。

    /*
     * 将n个盘子由初始木桩移动到目标木桩(利用借用木桩)
     */
    public void hanoi(int n, char from, char denpend_on, char to) {
        if (n == 1)
            // 只有一个盘子是直接将初始木桩上的盘子移动到目的木桩
            move(1, from, to);
        else {
           // 先将初始木桩的前n-1个盘子借助目的木桩移动到借用木桩上
            hanoi(n - 1, from, to, denpend_on);
           // 将剩下的一个盘子移动到目的木桩上
            move(n, from, to); 
           // 最后将借用木桩上的n-1个盘子移动到目的木桩上
            hanoi(n - 1, denpend_on, from, to);
        }
    }

    /*
     * 将编号为n的盘子由from移动到to
     */
    private void move(int n, char from, char to) { 
        System.out.println("Move " + n + " from " + from + " to " + to);
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 汉诺塔是指这个: 目标是要把所有的盘子从最左边(柱子A)移动到最右边(柱子C),条件是 1)每次只能移动一个盘子 ...
    mouse33333阅读 2,943评论 7 8
  • 文章也同时在个人博客 http://kimihe.com/[http://kimihe.com/2016/12/2...
    QihuaZhou阅读 2,513评论 0 2
  • 起源 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子...
    小白frankie阅读 3,541评论 0 2
  • 有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至B杆:...
    szu_bee阅读 654评论 0 0
  • 从小我生活过的地方,叫玄坛庙,位于重庆南岸,依山傍水,是一个美丽的地方。 玄坛庙有着许多鲜为人知的故事和传说。 传...
    欧阳氏磨刀石阅读 3,977评论 1 4