zoukankan      html  css  js  c++  java
  • 算法(一)—— 河内之塔(汉诺塔)

    说明

      河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时
    北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世
    纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64
    个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根
    石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬
    运完毕之时,此塔将毁损,而也就是世界末日来临之时。

    解法

      如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘
    子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处
    理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式
    的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则
    所需次数为:2 64- 1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000世 纪 ,
    如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。

    Java代码实现

    //河内之塔
    //需要执行的次数:事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1
    public class HanoiDemo {
        public static void main(String[] args) {
            System.out.println("请输入盘子数:");
            Scanner sc=new Scanner(System.in);
            int n = sc.nextInt();
            hanoi(n,'A','B','C');
        }
    
        /**
         * @param n 盘数
         * @param A 来源
         * @param B 依赖
         * @param C 目的
         */
        static void  hanoi(int n,char A,char B,char C){
            if(n==1){
                move(n,A,C);
            }else{
                //第一步:把A上的n-1个盘子通过C移动到B
                hanoi(n-1,A,C,B);
                //第二步:把A上的最下面的盘移动到C
                move(n,A,C);
                //第三步:因为n-1个盘全部在B上了,所以把B当做A(A,B位置互换),重复以上步骤
                hanoi(n-1,B,A,C);
            }
        }
        //计数
        static  int i=1;
        /**
         * @param n 盘数
         * @param A 来源
         * @param C 目的
         */
        static void  move(int n, char A,char C){
            System.out.println("第"+(i++)+"步:将盘子"+n+"从"+A+"------->移动到"+C);
        }
    }
  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/isxiaoming/p/12743079.html
Copyright © 2011-2022 走看看