汉诺塔问题

2019 精帖
0 353

汉诺塔汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

package problem;
/**
 * 汉诺塔问题
 * @author LENOVO
 *
 */
public class Hanoi {
    public void hanoi(int n, char A, char B, char C) {
        if (n == 1) {
            move(A, C);
        } else {
            hanoi(n - 1, A, C, B);//步骤1 按ACB数序执行N-1的汉诺塔移动
            move(A, C);             //步骤2   执行最大盘子移动
            hanoi(n - 1, B, A, C);//步骤3 按BAC数序执行N-1的汉诺塔移动
        }
    }

    private void move(char A, char C) {//执行最大盘子的从A-C的移动
        System.out.println("move:" + A + "--->" + C);
    }

    public static void main(String[] args) {
        Hanoi hanoi = new Hanoi();
        System.out.println("移动汉诺塔的步骤:");
        hanoi.hanoi(32, 'a', 'b', 'c');
    }
}

调用过程:

image.png

具体细节还没有理解透彻

留言(0)
加载更多
猜你喜欢
  • blog 关于父类和子类方法发生重载的

      在一本书上看到过子类可以重载父类的方法,关于这一点有点疑惑,个人重载是发生在同一个类中。网上关于这个也存在争议。先暂时作为一个记录在此   下面这张图片引用自《疯狂java讲义第三版》  
  • blog springmvc使用@CrossOrigin注解解决ajax请求接口跨域

    springmvc项目中,如一个项目的页面调用另一个项目的接口会产生跨域 403。对于一个接口而言很好解决跨域,springmvc中只需要在接口上加一个注解。@CrossOrigin(origins = {'http://www.j
  • blog springboot打包分离资源文件时遇到的

    多么痛的领悟~分离资源打包后运行项目,启动失败数据源初始化失败~检查,这种情况下没有打印错误日志,首先配置一下日志,将错误报告在控制台中打印出来。resources文件夹下 创建一个 log4j.properties 文件log4j.r
  • blog 算法-迷宫-广度优先搜索-队列

    描述思路: 典型的广度优先搜索算法,根据字典序大小,可以确定遍历的循序, 因为字典序D<L<R<U, 所以对于每一个节点优先先往下走,然后向左走,然后向右走,然后向上走。则最后首先到达出口的一条路径就是符合意的最短路径。
  • ofc 图解最短路径-floyd算法(图的邻接矩阵表示)

    图解最短路径-floyd算法(图的邻接矩阵表示)
  • blog centos7防火墙

    1、firewalld的基本使用启动: systemctl start firewalld关闭: systemctl stop firewalld查看状态: systemctl status firewalld 开机禁用 : system
  • blog 迷宫-寻找最短路径

    迷宫-寻找最短路径算法:广度优先搜索数据结构:队列,链表代码实现:<!DOCTYPE html><html> <head> <meta charset='UTF-8'> <title></title> <script> var
  • blog 枚举算法案例--熄灯

    熄灯1.描述有一个有按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上下左右)的灯都会改变一次。即(原来亮的变暗,原来暗的变亮)对矩阵中的每一盏灯设置一个初始状态。请你写一
  • blog 线程的同步

    多线程带来的: 线程有时候回和其他线程共享一些资源,比如内存、数据库等。当多个线程同时读写同一份共享资源的时候,可能会发生冲突。这时候,我们就需要引入线程“同步”机制,即各位线程之间要有顺序使用,不能杂乱无章随意使用。实例
  • blog 算法-求和

    描述 给定一个int类型一维数组 a[],和一个int类型的数值 b。编写一个程序,判断数组中有没有两个数(a[i],a[j])的和等于b,如果存在,返回两个数在a数组中的下表(return new int[]={1,2}