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

  • 相关阅读:
    第06组 每周小结 (1/3)
    第06组 Beta冲刺 总结
    第06组 Beta冲刺(5/5)
    爬虫第六次作业
    第06组 Beta冲刺 (4/5)
    第06组 Beta冲刺 (3/5)
    第06组 Beta冲刺 (2/5)
    《机器学习》第二次作业——第四章学习记录和心得
    软工实践个人总结
    第09组 每周小结 (3/3)
  • 原文地址:https://www.cnblogs.com/llfy/p/9322524.html
Copyright © 2011-2022 走看看