汉诺塔问题java代码_汉诺塔问题编程算法

汉诺塔问题java代码_汉诺塔问题编程算法代码:packagecom.wangyq.datastructrue.arithmetic;importjava.util.Arrays;importjava.util.Stack;/***分治算法-汉罗塔*/publicclassDivideAndConquer{publicstaticvoidmain(String[]args){//定义一个汉罗塔TowerofHanoitowerofHanoi=newT

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

代码:

package com.wangyq.datastructrue.arithmetic;

import java.util.Arrays;
import java.util.Stack;

/** * 分治算法-汉罗塔 */
public class DivideAndConquer { 
   
    public static void main(String[] args) { 
   
        //定义一个汉罗塔
        TowerofHanoi towerofHanoi = new TowerofHanoi(4);
        towerofHanoi.show();
        towerofHanoi.hannoi();
    }

}

class TowerofHanoi { 
   
    int tier = 0;
    Stack column1 = new Stack();
    Stack column2 = new Stack();
    Stack column3 = new Stack();

    TowerofHanoi(int tier) { 
   
        this.tier = tier;
        //初始化汉罗塔
        for (int i = tier; i > 0; i--) { 
   
            column1.push(i);
        }
    }

    /** * 打印汉罗塔 */
    public void show() { 
   
        System.out.println("汉罗塔:");
        System.out.println("第一根柱子" + Arrays.toString(column1.toArray()));
        System.out.println("第二根柱子" + Arrays.toString(column2.toArray()));
        System.out.println("第三根柱子" + Arrays.toString(column3.toArray()));
    }


    public void hannoi() { 
   
        move(tier, column1, column2, column3);
    }

    /** * 汉罗塔移动 */
    public void move(int tier, Stack stack1, Stack stack2, Stack stack3) { 
   
        if (tier == 1) { 
   
            //只有一个直接移上去
            stack3.push(stack1.pop());
            show();
        } else { 
   
            //
            move(tier - 1, stack1, stack3, stack2); //将n-1个在A柱子的盘子通过c柱子移动到B柱子
            stack3.push(stack1.pop());
            show();                                       //将A柱子上编号为n的盘子移动到c柱子
            move(tier - 1, stack2, stack1, stack3);  //将在B柱子的n-1盘子通过A柱子移动到C柱子
        }
    }
}

结果:
汉罗塔:
第一根柱子[4, 3, 2, 1]
第二根柱子[]
第三根柱子[]
汉罗塔:
第一根柱子[4, 3, 2]
第二根柱子[1]
第三根柱子[]
汉罗塔:
第一根柱子[4, 3]
第二根柱子[1]
第三根柱子[2]
汉罗塔:
第一根柱子[4, 3]
第二根柱子[]
第三根柱子[2, 1]
汉罗塔:
第一根柱子[4]
第二根柱子[3]
第三根柱子[2, 1]
汉罗塔:
第一根柱子[4, 1]
第二根柱子[3]
第三根柱子[2]
汉罗塔:
第一根柱子[4, 1]
第二根柱子[3, 2]
第三根柱子[]
汉罗塔:
第一根柱子[4]
第二根柱子[3, 2, 1]
第三根柱子[]
汉罗塔:
第一根柱子[]
第二根柱子[3, 2, 1]
第三根柱子[4]
汉罗塔:
第一根柱子[]
第二根柱子[3, 2]
第三根柱子[4, 1]
汉罗塔:
第一根柱子[2]
第二根柱子[3]
第三根柱子[4, 1]
汉罗塔:
第一根柱子[2, 1]
第二根柱子[3]
第三根柱子[4]
汉罗塔:
第一根柱子[2, 1]
第二根柱子[]
第三根柱子[4, 3]
汉罗塔:
第一根柱子[2]
第二根柱子[1]
第三根柱子[4, 3]
汉罗塔:
第一根柱子[]
第二根柱子[1]
第三根柱子[4, 3, 2]
汉罗塔:
第一根柱子[]
第二根柱子[]
第三根柱子[4, 3, 2, 1]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182891.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网页刷新快捷键ctrl加什么_谷歌浏览器刷新快捷键

    网页刷新快捷键ctrl加什么_谷歌浏览器刷新快捷键强制刷新ctrl+F5

    2022年8月1日
    2
  • mcu单片机开发_AVR单片机

    mcu单片机开发_AVR单片机关于单片机(MCU)最强科普

    2022年10月8日
    0
  • PyCharm许可证过期解决方案

    PyCharm许可证过期解决方案PyCharm许可证过期解决方案1.选择enterlicense2.选择licenseserver3.输入http://idea.imsxm.com4.点击ok

    2022年8月26日
    9
  • 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第二章(1) 2020-12-21[通俗易懂]

    小白能读懂的 《手把手教你学DSP(TMS320X281X)》第二章(1) 2020-12-21[通俗易懂]1声明由于本人也是小白,只是将所能查询到的资料进行汇总,水平有限,只能代表个人的理解,但所写文章也从小白视角出发,对小白友好,如果帮助到你,记得点赞收藏不迷路。如果文章有错误,请不吝赐教;待我查询后一定改正,这样你我教学相长,岂不美哉,当然有些错误待我多时之后也可能自己发现,到时候自己回来改正,不过有的可能遗忘,所以能提醒我最好,哈哈,谢谢。2概述首先dsp2812是32位的定点dsp。单片机中的32位是指cpu处理的数据的宽度,即参与运算的寄存器的数据长度。…

    2022年5月1日
    35
  • shell脚本实例精讲_shell脚本编程实例

    shell脚本实例精讲_shell脚本编程实例shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。shell脚本中最重要的就是对shell命令的使用与组合,再使用shell脚本支持的一些语言特性,完成想要的功能。今天给大家分享《shell脚本100例》,包含了90%的shell脚本知识点,想

    2022年9月28日
    0
  • mysql mycat读写分离_mycat读写分离原理

    mysql mycat读写分离_mycat读写分离原理MyCat的说明文档请参见主要使用到得几个配置文件有schema.xml、rule.xml、server.xmlMYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容.MYCAT_HOME/conf/rule.xml中定义分片规则.MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等.假设有如下几个数据库,arp库是a库的复制…

    2022年8月31日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号