zoukankan      html  css  js  c++  java
  • 20190710-汉诺塔算法

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界
    的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵
    天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘
    上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

    关键点:

    一次只能移动一个盘子
    大盘不能重叠在小盘子上

    当n=1的时候
    1. 直接将1从X移动到Z

    当n=2的时候
    1. 将1从X移动到Y轴
    2. 将2从X移动到Z轴
    3. 将1从Y移动到Z轴

    当n=3的时候
    1. 将1从X移动到Z
    2. 将2从X移动到Y
    3. 将1从Z移动到Y
    4. 将3从X移动到Z
    5. 将1从Y移动到X
    6. 将2从Y移动到Z
    7. 将1从X移动到Z

    当n=4的时候

    当前挪动的盘子为1,挪动轨迹为x==>y
    当前挪动的盘子为2,挪动轨迹为x==>z
    当前挪动的盘子为1,挪动轨迹为y==>z
    当前挪动的盘子为3,挪动轨迹为x==>y
    当前挪动的盘子为1,挪动轨迹为z==>x
    当前挪动的盘子为2,挪动轨迹为z==>y
    当前挪动的盘子为1,挪动轨迹为x==>y
    当前挪动的盘子为4,挪动轨迹为x==>z
    当前挪动的盘子为1,挪动轨迹为y==>z
    当前挪动的盘子为2,挪动轨迹为y==>x
    当前挪动的盘子为1,挪动轨迹为z==>x
    当前挪动的盘子为3,挪动轨迹为y==>z
    当前挪动的盘子为1,挪动轨迹为x==>y
    当前挪动的盘子为2,挪动轨迹为x==>z
    当前挪动的盘子为1,挪动轨迹为y==>z

    总结规律为:

    要想移动n个盘子从X轴到Z轴需要经过如下三步:
    1. 将n-1个盘子从X轴移动到Y轴
    2. 将第n个盘子从X轴移动到Z轴
    3. 将n-1个盘子从Y轴移动到Z轴

    转换为算法
    • 递归的结束条件:
    • 当n=1的时候,直接将n移动到Z轴
    • 递归条件:
    1. 将n-1个盘子从X轴移动到Y轴
    2. 将第n个盘子从X轴移动到Z轴
    3. 将n-1个盘子从Y轴移动到Z轴

    代码

    def hannota(n,x,y,z):
        if n ==1:
            print('%s->%s'%(x,z))#当n=1的时候,直接将n移动到z轴
        else:
            hannota(n-1,x,z,y)#将n-1个盘子从X轴移动到Y轴
            print('%s->%s'%(x,z))#将第n个盘子从X轴移动到Z轴
            hannota(n-1,y,x,z)#将n-1个盘子从Y轴移动到Z轴
    hannota(3,'x','y','z')
  • 相关阅读:
    常用控件的学习
    C# NOSQL 开源项目
    Js生成Guid
    通过sql语句附加数据库与启用sa账户
    Js 键值对实现
    sqlServer2000 安装备忘
    System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
    关于ado.net连接池的一些分享(2)(原文出自:http://www.cnblogs.com/b42259626/articles/968460.html)
    关于ado.net连接池的一些分享(原文出自:http://www.cnblogs.com/rickie/archive/2004/10/02/48546.aspx)
    删除迅雷文件夹
  • 原文地址:https://www.cnblogs.com/hyj691001/p/11167032.html
Copyright © 2011-2022 走看看