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

      效果如图:

  • 相关阅读:
    HDU1029 Ignatius and the Princess IV
    UVA11039 Building designing【排序】
    UVA11039 Building designing【排序】
    POJ3278 HDU2717 Catch That Cow
    POJ3278 HDU2717 Catch That Cow
    POJ1338 Ugly Numbers(解法二)
    POJ1338 Ugly Numbers(解法二)
    UVA532 Dungeon Master
    UVA532 Dungeon Master
    POJ1915 Knight Moves
  • 原文地址:https://www.cnblogs.com/cysolo/p/3558432.html
Copyright © 2020-2023  润新知