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

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 数据库事务4种隔离级别及7种传播行为「建议收藏」

    数据库事务4种隔离级别及7种传播行为「建议收藏」数据库事务4种隔离级别及7种传播行为

    2022年4月23日
  • 一种Python工具的License授权机制

    一种Python工具的License授权机制作为一种流行语言,在不同的应用领域,利用Python书写的工具越来越多。Python具有应用领域广泛、简单易学、功能强大等特点,但是在很多场合它也具有一些较难克服的缺点:代码明文,较难加密。 由于#1,python脚本很难应用于收费工具领域。那么如果我想对一个Python工具的使用加以限制,有没有什么方法可以实现呢?本文提供一种简易的License授权机制实现思路,它主要包括如下几部分内容:如何生成一个加密的License文件。 如何做License内容核验。…

    2022年11月1日
  • navicat激活码2021【2021免费激活】

    (navicat激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
  • 远程唤醒实现开机

    远程唤醒实现开机packagecom.lh.openOS;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.net.SocketException;publicclassTestOpenOS{ privateintport=100

    2022年5月6日
  • D3人物关系图谱「建议收藏」

    D3人物关系图谱「建议收藏」本人其他博客有介绍

    2022年6月26日
  • postman最新版_postcrossing中文版

    postman最新版_postcrossing中文版PostmanCn最新版本:7.36.1更新时间:2020-12-18点击下载https://www.postman.com/downloads/这个是Postman官网的下载页面https://gitee.com/hlmd/PostmanCn/attach_files/492931/download/postman_EnToCn.zip这个是这里的汉化的介绍Postman中文版汉化持续更新中安装教程WindowsPostman-*-win64-中文版…

    2022年9月28日

发表回复

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

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