zoukankan      html  css  js  c++  java
  • 关于Hanoi算法

    java经典算法——河内算法(Hanoi)

    有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,设移动次数为H(n)。

    原理:

      当n=1时,H(1)=1,即A—>C; 
      当n=2时,H(2)=3,即A—>B,A—>C,B—>C; 
      当n>2时,可以将第1个盘子到第n-1个盘子看成一个整体为①,这样就仍为两个盘子: 
      第一步:①从A—>B:共H(n-1)步; 
      第二步:n 从A—>C:共1步; 
      第三步:①从B—>C:共H(n-1)步. 

        public static void main(String args[]) throws IOException {
            int n;
            BufferedReader buf;
            buf = new BufferedReader(new InputStreamReader(System. in ));
            System.out.print("请输入盘数:");
            n = Integer.parseInt(buf.readLine());
            Hanoi hanoi = new Hanoi();
            hanoi.move(n, 'A', 'B', 'C');
        }
        public void move(int n, char a, char b, char c) {
            //第二步: 最底下的1个盘子,从A移到C
            if (n == 1) {
                System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
            } else {
                //第一步:把上面(n-1)个盘子从A移到B
                move(n - 1, a, c, b);
                System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
                //第三步:把(n-1)个盘子从B移到C
                move(n - 1, b, a, c);
            }
        }

     转载自:https://blog.csdn.net/wkedward1937/article/details/52667657

  • 相关阅读:
    使用cordova开发移动app时用form表单的submit时遇到的问题
    收藏链接
    Hibernate总结
    MyBatis基本应用
    Java中字符串(String)总结
    SpringMVC
    SpringIOC----注解
    栈与堆的区别
    IOS模型
    Java Web容器的启动过程
  • 原文地址:https://www.cnblogs.com/llfy/p/9322524.html
Copyright © 2011-2022 走看看