汉诺塔问题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]

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java设计模式之结构型:装饰器模式

    Java设计模式之结构型:装饰器模式

  • 微生物组助手——最易学的扩增子、宏基因组分析流程

    微生物组助手——最易学的扩增子、宏基因组分析流程软件简介MicrobiomeHelper开源软件,方便大家分析微生物组数据。不仅提供了多套扩增子、宏基因组的分析流程方案,同时提供了几十个软件间衔接的脚本,可大大提高使用者分析的效率。文章于2017年发表于mSystems。Github项目主页:https://github.com/LangilleLab/microbiome_helpermicrobiomehelp结合不同组…

  • IE10/IE11兼容视图设置方法_ie浏览器兼容性视图设置

    IE10/IE11兼容视图设置方法_ie浏览器兼容性视图设置如何设置ie11浏览器兼容性视图?ie浏览器是系统自带的浏览器,由于兼容性问题不受欢迎。接下来小编就给大家介绍一下如何设置ie11浏览器兼容性视图。具体如下:1.首先第一步打开电脑中的【ie浏览器】。2.第二步进入浏览器首页后,根据下图所示,点击页面右上方的齿轮图标。3.第三步在弹出的菜单栏中,根据下图所示,点击【兼容性视图设置】选项。4.第四步进入【兼容性视图设置】页面后,根据下图所示,…

  • 《前端运维》一、Linux基础–06Shell流程控制

    这章我们来学习下流程控制,简单来说就是逻辑判断和循环的写法。并不复杂,我们来简单地看下。1、if语句shell的if语句有两种写法,一种是shell脚本式的,一种是命令式的。ifconditi

  • 黑盒测试的常见的测试用例设计方法有哪些[通俗易懂]

    黑盒测试的常见的测试用例设计方法有哪些[通俗易懂]测试用例怎么设计?一般根据业务知识掌握,之前已有的回归测试用例,测试知识库,测试需求开始设计。黑盒测试的常见的测试用例设计方法有哪些?1)等价类划分:等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

发表回复

您的电子邮箱地址不会被公开。

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