zoukankan      html  css  js  c++  java
  • 汉诺塔游戏攻略(递归)

    汉诺塔(益智玩具)

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

    那么我们怎么玩呢?

    其实是有规律性的游戏,并且满足一定的递归性。

    我们把放盒子的柱子设置为x,其余两根分别设置为y,z,要想让盒子从x移动到z上,并且成金字塔形摆放

    第一步:如果只有一个的时候,直接从x移动到z上即可,如果n个呢,那先将这n-1个借助z移动到y上

    第二步:然后将最后一个直接移动到z上,这最后一个就是最大的了

    第三步:将在y的的n-1个盒子借助x移动到z上就可以了。

    可能听我这么扯淡没那么明白,去游戏里玩玩就懂了,不管多少个都一样玩。

    /*本实例是一个游戏的攻略具体玩法可以访问:http://www.4399.com/flash/109504_1.htm*/

    打上代码

     1 package game;
     2 
     3 /*本实例是一个游戏的攻略具体玩法可以访问:http://www.4399.com/flash/109504_1.htm*/
     4 public class Demo {
     5 
     6     public static void main(String[] args) {
     7         move(3, 'x', 'y', 'z');
     8    }
     910/* 表示n个盘子从 x 借助 y 移动到 z */11publicstaticvoid move(int n, char x, char y, char z) {
    12if (n == 1) // 当只有一个盘子的时候,我们直接从x移动到z13             System.out.println(x + "--->" + z);
    14else {
    15             move(n - 1, x, z, y); // 第n+1个盘子从x借助z移动到y16             System.out.println(x + "--->" + z); // 第n个盘子从x移动到z17             move(n - 1, y, x, z); // 第n+1个盘子从y借助x移动到z18        }
    19    }
    2021 }

    完毕 - . -

  • 相关阅读:
    P2422 良好的感觉
    拉格朗日插值
    C# 中的委托和事件(详解)
    异步委托
    ManualResetEvent详解
    快速理解C#高级概念事件与委托的区别
    拉格朗日多项式
    oracle 插入一个从别处查询获得字段的值
    decode和nvl的用法
    C#将像素值转换为图片
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/10321457.html
Copyright © 2011-2022 走看看