zoukankan      html  css  js  c++  java
  • 解决汉诺塔问题

    题目

    有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:

    • 每次只能移动一个圆盘
    • 大盘不能叠在小盘上面

    思路

    • 只有一个圆盘时,直接将A中的圆盘放置于C

    • 底盘保持不移,所以是n-1,移动3个盘,实际移动2个盘

    • 多个圆盘时(2个为例),先将A中的第一个圆盘放置于C,第二个圆盘放置于B

    • 当A没有多个圆盘且每个圆盘都占有B和C杆位置时,利用每次只能移动一个圆盘,大盘不能叠在小盘上面的信息,重新逆序排列,以3个圆盘各占A、B、C杆为例

      • 摆放顺序则为:B、A、C

    递归实现

    package com.test.hanoi;
    
    import org.junit.Test;
    
    /**
     * @author lorem 
     *
     */
    public class Hanoi {
        @Test
        public void test(){
            String A = "A";
            String B = "B";
            String C = "C";
            hanoiStep(3,A,B,C);
        }
        public void hanoiStep(int n,String A,String B,String C){
            if (n == 1){
                mv(A,C);
                return;
            }else{
             hanoiStep(n-1,A,C,B);
             mv(A,C);
             hanoiStep(n-1,B,A,C);
    
            }
        }
        public void mv(String A,String C){
            System.out.println(A+"->"+C);
        }
    
    }
    
    - The End -

    知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

  • 相关阅读:
    firstResponder
    形而上学
    du -h
    数据本地存贮与数据结构(对象)
    RFC
    oc语言源代码
    HTTP1.1协议中文版-RFC2616
    如何提高团队协作的效率
    iOS应用架构谈 开篇
    nginx版本如何选择?
  • 原文地址:https://www.cnblogs.com/hoochanlon/p/9676668.html
Copyright © 2011-2022 走看看