zoukankan      html  css  js  c++  java
  • Java求解汉诺塔问题

    汉诺塔问题的描述如下:有3根柱子ABC,在A上从上往下按照从小到大的顺序放着一些圆盘,以B为中介,把盘子全部移动到C上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。编程实现3阶汉诺塔的求解步骤。

    思路如下:

    1. 要实现3阶汉诺塔的求解步骤,也就是说初始状态时,A上从上到下有三个盘子,分别为1号盘、2号盘和3号盘,其中1号盘最小,3号盘最大;
    2. 判断剩余盘子个数,如果只有一个盘子就退出迭代,如果有大于一个盘子就继续迭代。

    代码如下:

    public class HanoiTower {
        public static void moveDish(int level, char from, char inter, char to) {
            if (level == 1) {// 如果只有一个盘子就退出迭代
                System.out.println("从 " + from + " 移动盘子 1 号到 " + to);
            } else {// 如果有大于一个盘子就继续迭代
                moveDish(level - 1, from, to, inter);
                System.out.println("从 " + from + " 移动盘子 " + level + " 号到 " + to);
                moveDish(level - 1, inter, from, to);
            }
        }
    
        public static void main(String[] args) {
            int nDisks = 3;// 设置汉诺塔为3阶
            moveDish(nDisks, 'A', 'B', 'C');// 实现移动算法
        }
    }
    

      效果如图:

  • 相关阅读:
    图片懒加载原生写法。
    ES6新声明
    下拉刷新上拉加载
    angular动画
    angular路由切换后 轮播以及iscrollJs失效的问题
    ui-route多级嵌套时的默认显示。
    iscroll.js的基本布局
    angular ng-route和ui-route
    require.js JQ
    Cookie&Session
  • 原文地址:https://www.cnblogs.com/cysolo/p/3558432.html
Copyright © 2011-2022 走看看