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');// 实现移动算法
        }
    }
    

      效果如图:

  • 相关阅读:
    c++-面向对象:类和对象
    c++-内联函数和函数重载和默认参数和函数指针
    c++-引用
    c++-const
    c++--语言本身
    排序-基数排序
    排序-归并排序
    排序-堆排序
    常用Java API: ArrayList(Vector) 和 LinkedList
    常用Java API:Calendar日期类
  • 原文地址:https://www.cnblogs.com/cysolo/p/3558432.html
Copyright © 2011-2022 走看看