用栈来模拟实现汉诺塔问题

用栈实现汉诺塔问题 任意输入N个盘,在三个柱子上实现汉诺塔问题的非递归求解,用栈进行 立即下载
</pre><pre name="code" class="java"><pre name="code" class="java">//用栈模拟实现汉诺塔问题
import java.util.*;
public class TestHanNuoTa{
	private static int size = 4;
	private static Stack A = new Stack(size);	//塔A
	private static Stack B = new Stack(size);	//塔A
	private static Stack C = new Stack(size);	//塔A
	public static void main(String[] args){
		for(int i = A.size(); i > 0; i--){		//初始化塔A
			A.push(i);
		}
		print();
		System.out.println("-----------------------------------------------");
		//开始移动
		move(A.size(),A,B,C);
		
	}
	public static void move(int size,Stack from,Stack inter,Stack to){
		if(size == 1){
			to.push(from.pop());
			print();
		}else{
			move(size - 1,from,to,inter);
			to.push(from.pop());
			print();
			move(size - 1,inter,from,to);
		}
	}
	public static void print(){
		System.out.println("A: " + A + " B: " + B + " C: " + C);
	}
}
class Stack{
	int[] array;
	int maxLength;
	int top;
	public Stack(int size){
		array = new int[size];
		maxLength = size;
		top = 0;
	}
	public void push(int a){
		array[top++] = a;
	}
	public int pop(){
		int temp = array[--top];
		array[top] = 0;
		return temp;
	}
	public boolean isEmpty(){
		return top == 0;
	}
	public int peek(){
		return array[top - 1];
	}
	public int size(){
		return maxLength;
	}
	public String toString(){
		return Arrays.toString(array);
	}
}

结果为:

<img src="https://img-blog.youkuaiyun.com/20141101103913200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGhpbmtfcHJvZ3JhbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

数据结构用顺序栈实现汉诺塔 数据结构用栈实现汉诺塔,用递归给你讲吧,先想这个棵树Tn,先把最下面的n要搬走,就得把上面的n-1个先搬走,这个n-1个也形成一个树T(n-1),然后又把这n-1个搬到n上面又形成一个T(n-1)的树,这个你就可以画出来,把n做做根,一个T(n-1)做左子树,一个T(n-1)做右子树,这个一直下去可以发现这树的深度为n的完全二叉树,而这个搬过程就是先序历遍这二叉树的过程,搬了次数也就是这树的结点的个数,2^n-1次,如果这个可以看到,只有2n-1个无素在栈中。 立即下载

相关推荐

MTK-Display技术解析:从MDP到DDP的架构演进

本文深入解析了联发科(MTK)显示技术从MDP到DDP的架构演进。MDP作为多媒体数据预处理中心,负责格式转换与缩放;而DDP则整合了OVL、COLOR、AAL等模块,并引入CMDQ与场景化模式,实现了从分散处理到统一智能调度的飞跃,旨在提升画质、流畅度并降低功耗。

weixin_29218509的博客 255

利用栈实现汉诺塔(Tower of Hanoi)

利用栈实现汉诺塔(Tower of Hanoi)

alm_of_csdn的博客 4777

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3272

【数据结构】栈的应用:汉诺塔问题

汉诺塔问题

Aimee_jaye的博客 914

手把手教你搭建自己的 API 中转站

本文介绍了如何通过开源工具CLIProxyAPI(CPA)搭建本地AI模型代理服务,解决多工具切换、海外API访问困难等问题。CPA可将OpenAI、Gemini等不同服务的API统一封装,用户只需配置一次账号信息,所有客户端即可通过标准接口访问。文章详细讲解了CPA的下载安装、配置修改、账号导入及客户端连接方法,并强调其经济性、可控性和集中管理优势。通过自建中转站,用户可避免第三方服务的质量风险,实现多账号负载均衡,构建个人AI资源池。最后提供了网络配置等实用建议,帮助开发者高效使用AI编程工具。

DongJiYong_20的博客 1812

深信服桌面云实战:从零部署到高效运维的关键配置指南

本文提供了一份深信服桌面云从零部署到高效运维的实战指南。内容涵盖项目启动阶段的资源、网络与存储规划,详细演示了VMP与VDC平台的安装与对接,并深入讲解了制作虚拟机模板、配置用户体系、优化终端策略等核心步骤。最后,分享了包括CPU公平分配、智能调度在内的关键性能调优与高阶运维技巧,旨在帮助管理员构建稳定、高效的云桌面环境。

blockchain9miner的博客 451

4.Python数据结构与算法分析课后习题(第二版)__chapter4

Python数据结构与算法分析课后习题第四章答案

conan04260426的博客 5213

2025认证杯数学建模第二阶段B题完整论文(代码齐全):谣言在社交网络上的传播

这需要我们深入理解抽样检测所得的次品率的不确定性及其对生产决策的影响。对于问题二的决策分析,我们可将其细分为四个关键的决策节点,分别是零件 1 的质量检测、零件 2 的质量检测、成品的质量检测,以及成品检测不合格时的拆解处理。该策略的实施,保证了在算法迭代过程中,表现最为优异的个体能够得到保留,并顺利传递至下一代,从而保障了算法在寻求最优解过程中的收敛性和优化效果。因此,我们采用假设检验的方法,将次品分布构造成 t 分布,从而确定在相应置信度的条件下,抽样次数 n 和次品数 k 所需满足的要求。

2301_81596622的博客 1007

汉诺塔的栈实现

该问题的解法可以通过递归的方式求解,将大问题划分为多个小问题,直到问题规模缩小到只剩下一个圆盘,然后再通过递归的方式将圆盘移动到目标柱子上。递归的过程中需要反复使用到借助柱子的思想,将问题逐步推进,直到所有圆盘都被移动到目标柱子上,问题得以解决。在递归的过程中,需要不断地将子问题的解组合起来,得到原问题的解。递归函数的参数需要包括源柱子、目标柱子和辅助柱子的编号,以及三个栈结构的指针,以便在递归过程中实现圆盘的移动和栈的操作。递归的边界条件:当只有一个圆盘时,直接将它从源柱子移动到目标柱子,递归结束。

qq_74110525的博客 1418

Python数据分析实战:用TIGRAMITE库5步搞定时间序列因果分析(附完整代码)

本文详细介绍了如何使用TIGRAMITE库进行时间序列因果分析,通过5个步骤从环境配置到模型优化,帮助读者掌握因果关系库的应用。附完整代码示例,适合数据分析师和研究人员快速实现复杂时间序列的因果发现。

weixin_29050271的博客 160

医学图像处理实战:利用OpenSlide解析病理SVS切片的完整解决方案

本文介绍了使用openslide处理病理SVS切片的完整流程,从基础安装到科研应用。主要内容包括:1)SVS切片特点及openslide工具简介;2)环境配置与软件安装;3)基础操作:读取切片、查看信息、可视化不同层级图像;4)进阶操作:坐标裁剪与批量处理;5)科研方向拓展:结合AI模型进行病理分割分类、量化分析及可视化报告。教程提供了完整的代码示例,帮助毕业设计学生快速掌握病理图像分析的核心技能。

m0_71589036的博客 311

6、用栈来求解汉诺塔问题

有左、中、右三根柱子,其中左柱子上面有从小叠到大的n个圆盘,现要求将左柱子上的圆盘移动到右柱子上,期间只有一个原则:一次只能移动一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数。

牛皮小驴爱吃鱼的博客 688

基于深度学习的三维重建算法——详解与实现

随着深度学习技术的迅猛发展,基于深度学习的三维重建算法在最近几年取得了显著的进展。而基于深度学习的三维重建算法通过利用深度神经网络,能够从大规模数据中学习到更准确、鲁棒的三维结构表示。本文综述了基于深度学习的三维重建算法,并给出了相应的源代码。随着深度学习技术的不断发展,我们相信基于深度学习的三维重建算法将会在未来得到更广泛的应用。实验结果表明,基于深度学习的三维重建算法在准确性和鲁棒性方面取得了显著的提升。以上是关于基于深度学习的三维重建算法的详细介绍与实现,希望对您有所帮助。

CyberGenius的博客 1228

汉诺塔问题C语言非递归算法

汉诺塔(Hanoi)问题是学习递归算法时一个很经典的例子,通过递归算法解决,在C站上很多很多,今日就跟着鸡翅一起学习一下非递归算法吧!这次使用的是栈堆的数据结构。//先定义栈元素 int n;//n表示当前是第几个圆盘 char a , b , c;// a,b,c代表三个柱子,a为当前圆盘所在柱子, b为可以借助的柱子, c为目标柱子,即要放到的那个位置的柱子 bool flag;//代表此时圆盘可以移动不 } elem;int top;// top标记栈顶元素 elem e [ 64 ];

一个学习网安的鸡翅 3790

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【C#算法实现】汉诺塔问题(每次只能移向相邻位置)

本文用C#实现了《程序员代码面试指南》中的用栈来求解汉诺塔问题。

qq_44951699的博客 1733

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PTA 汉诺塔的非递归实现

PTA 汉诺塔的非递归实现 7-11 汉诺塔的非递归实现 (25分) 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。 输入格式: 输入为一个正整数N,即起始柱上的盘数。 输出格式: 每个操作(移动)占一行,按柱1 -> 柱2的格式输出。...

qq_43778565的博客 3625

汉诺塔问题

问题描述 用栈模拟汉诺塔问题 在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件: (1) 每次只能移动一个盘子。 (2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。 (3) 每个盘子只能放在比它大的盘子上面。 请写一段程序,实现将第一个堆的盘子移动到最后一个堆中。 样例 样例1: 输入: 3 输出: towers[0]: [] towers[1]:

weixin_43328054的博客 195

数据结构复习篇:用栈实现递归

也许大家会疑问:复习完栈应该到队列了吧。我开始也是这样想的,但用栈实现递归,是一个难点。说实话,我以前学习的时候,就在这一处卡住了,当时我烦躁了好几天,但可能由于突然被什么东西转移了注意力,所以就这样跳过去了。不知道用栈实现递归,也确实不大影响后面的学习,但我可以肯定,如果你觉得世界上有一些东西难以理解而不愿面对,那自信将会由此削弱。当然,遇到困难可以适当地把它放下,但逃避应该是暂时的,必须鼓励自

Chinainvent的专栏 2万+

汉诺塔递归、非递归实现——递归与栈模拟递归的理解

大一学习递归总是想要弄明白递归程序具体的运行步骤,但无奈一次次“迷失”在递归的迷宫中。。。 递归的精妙之处不在于它能用少量的代码来实现十分复杂的功能,而在于它能表达出“分形”结构。 在数学上的分形我就不展开说了,在编程上的分形简单来说,就是想像一个任务由许许多多工人完成,他们只会机械的做事,自己就是其中的一个最普通的工人,将自己要做的事用代码表达出来。 就汉诺塔来说,自己负责搬运第n块: 先让其他人将自己上面的n-1块从start柱,搬到mid柱,经过end柱。 自己将第n块从start柱,搬到end柱,

peng_fighting的博客 438

汉诺塔问题的递归与迭代实现

汉诺塔问题的递归与迭代实现 递归实现 /** * 递归算法 * @param src 源组柱子 * @param tar 目标柱子 * @param temp 中介柱子 * @param amount 盘子的数量 */ public void recurHannoi(String src, String tar, String temp, int amount) { if (amount == 1)

花开的博客 737

数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)

/// <summary> /// 模拟 递归函数的调用堆栈 /// </summary> /// <param name="n"></param> private void GoHonoi(int n) { Step sp = new ...

weixin_33901843的博客 269

栈和队列----用栈求解汉诺塔问题

用栈求解汉诺塔问题      汉诺塔问题比较经典,现在修改一下汉诺塔游戏的规则:规定不能直接从左移动到右,也不能直接从右移动到左,必须经过中柱,求解当塔有N层的时候,打印最优移动过程和最优移动总步数。   可以采用两个方法解决。方法一采用递归的方法;方法二采用非递归的方法,用栈来模拟汉诺塔的三个塔。 package com.test; import java.ut...

428

【左神】递归和栈解决汉诺塔问题

汉诺塔。

『程序员·小李』的博客 570

递归5--汉诺塔问题的栈实现

递归5--汉诺塔问题的栈实现 汉诺塔的递归解法:http://www.cnblogs.com/Renyi-Fan/p/6949515.html 一、心得 系统里面的递归就是靠栈来维护的,区别我们普通栈的是维护递归的那个栈有返回地址递归每深入一层,栈顶元素加一递归每退出一层,栈顶元素减一返回地址是执行完这一层,返回到上一层的地址 就是从栈里面取元素然后操作这个元素,如此循环往复,和队列操作几...

weixin_34099526的博客 182

用栈来求解汉诺塔问题(python)

# 用栈来求解汉诺塔问题 # 方法一:递归的方法 def hanoiProblem(num:int, left:str, mid:str, right:str)->int: if num < 1: return 0 return process(num, left, mid, right, left, right) def process(nu...

qq_40431898的博客 2463
上一篇: 中缀表达式转换到后缀表达式(java实现)
下一篇: 提供给外部调用的接口设计原则
拓-拓
博客等级 码龄12年 10粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值