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

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

      为了将第N个盘子从A移动到C,需要先将第N个盘子上面的N-1个盘子移动到B上,这样才能将第N个盘子移动到C上。同理,为了将第N-1个盘子从B移动到C上,需要将N-2个盘子移动到A上,这样才能将第N-1个盘子移动到C上。通过递归就可以实现汉诺塔问题的求解,其最少移动次数为2n-1

      编写类HanoiTower,在该类中包含了两个方法,moveDish()方法使用递归来实现问题的求解,main()方法用来进行测试。代码如下:

    package com.mingrisoft.oop;
    
    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;
            moveDish(nDisks, 'A', 'B', 'C');
        }
    }
    

      

    心法领悟static方法的使用。

    当类所实现的功能与具体的对象无关时,可以使用static方法。如果将类中的static方法声明为public的,则既可以使用“类名.方法名”的方式来访问该static方法,又可以使用“对象.方法名”的方式访问。通常推荐前者,因为它能更好地表示static关键字的含义。

  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/mrxy/p/6559203.html
Copyright © 2011-2022 走看看