习题3.10 汉诺塔的非递归实现 (25 分) C语言实现_习题3.10 汉诺塔的非递归实现 分数 25 全屏浏览题目 切换布局 作者 ds课程组 单位-程序员宅基地

技术标签: c语言  数据结构学习  数据结构  

PTA 浙大版《数据结构(第2版)》题目集

习题3.10 汉诺塔的非递归实现 (C语言实现)

借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。

输入格式:
输入为一个正整数N,即起始柱上的盘数。

输出格式:
每个操作(移动)占一行,按柱1 -> 柱2的格式输出。

输入样例:

3

输出样例:

a -> c
a -> b
c -> b
a -> c
b -> a
b -> c
a -> c

解题思路:
如果是已经使用递归解决过汉诺塔问题,那就会发现汉诺塔问题的解决是需要不断切换目前正在处理的柱子,比如在第一步我们正在处理柱子S1的时候,我们会尽可能把S1上的盘子放到S2和S3上,然后我们切换到柱子S2,重复上一个步骤,将目前正在处理的柱子和其他的所有柱子之间分别进行移动。大致操作是如此,还不太明白的同学可以参考:
https://zhuanlan.zhihu.com/p/36085324
就是要注意下最终移动到的柱子未必就是开始直接移动过去的那一根,具体拿1个盘子,2个盘子自己在纸上试试大概就能明白了。
同样的结题思路也可以很容易的扩展到4根柱子,5根柱子,目前的程序应该也比较容易扩展,不过具体我懒得试了。

代码如下:(PS:由于个人习惯问题,能打包的都会尽量打包,所以会显得函数特多)

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

typedef struct StackStruct* Stack;
struct StackStruct{
   
    
	int Data[MAXSIZE];
	int Top;
	char Name;
};

Stack stackCreate(char Name);
int stackPop(Stack S);
void stackPush(Stack S,int X);
void stackPrint(Stack S);
void mainProcess(int N);
void movePlate(Stack S1,
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43709894/article/details/118731042

智能推荐

Java线程池execute()和submit()方法的区别_线程池commit和execute 区别-程序员宅基地

文章浏览阅读994次,点赞2次,收藏6次。execute()更加简单直接,适用于不需要关心任务的返回值以及异常处理的情况,而submit()则更加灵活,适用于需要获取任务的执行状态、结果,并进行相应的处理的情况。_线程池commit和execute 区别

分享40个极具商业价值的chatGPT提问prompt_chatgpt promote-程序员宅基地

文章浏览阅读131次。提示:"头脑风暴5个有创意的与[主题]相关的表情或GIF的想法,我可以在Twitter和我的通讯上分享它们,增添乐趣和娱乐。提示: "帮助我为我的[插入产品或服务]阐明独特的价值主张。提示:"帮助我为我的通讯创作一段与[主题]相关的引人入胜的故事,使用英雄的旅程框架来吸引和捕获我的观众。提示:"使用PAS框架为[主题]写一份通讯的介绍,解决我读者面临的特定问题,加深问题,提出解决方案。提示:"鉴于我当前的睡眠习惯[插入睡眠时间表和习惯],为优化我的睡眠以提高生产力和专注力提供建议。_chatgpt promote

常用的投影图像编码方法之时间多路编码方法_多路分时编码-程序员宅基地

文章浏览阅读295次。在1998年,彩色编码方法被提出,该方法利用颜色的多级格雷码方法,使用n个符号字母表,使每个字母和一个特定的RGB模型中的一个颜色对应,因此,二值码的推广是有效的,当投射a幅编码图像时,二值码既可以确定出。格雷码编码出的码值在前后位之间最多只会有一位不相同,因此,该方法极大地解决二进制码在黑白边缘附近解码时会出现错误的情况,提高了编码的稳定性、鲁棒性,并且对于格雷码自身而言,它是循环码因此具有自补性,格雷码的优点均使其在编码解码过程中降低误差的出现。二值编码、多值编码、时间编码结合相移编码和混合编码。_多路分时编码

js金钱千分位分隔符_js money 千分号-程序员宅基地

文章浏览阅读499次。金钱千分位分隔符:function moneyFormat(nMoney){ if(nMoney == 0){ return ‘0.00’; } if(nMoney && nMoney != null){ nMoney = String(nMoney); var sLeft = nMoney.split(’.’)[0], sRight = nMoney.split(’.’)[1]; sRight = sRight ? (sRig_js money 千分号

APM2323AAC-TRL-VB一款SOT23封装P—Channel场效应MOS管-程序员宅基地

文章浏览阅读312次,点赞8次,收藏7次。*总结:** APM2323AAC-TRL-VB是一款适用于负电压场景的P-Channel沟道MOSFET,包括负电压电源开关、负电压电池保护、负载开关和逆变器等领域。1. **负电压电源开关:** APM2323AAC-TRL-VB适用于负电压电源开关模块,特别在需要进行负电压电源管理的应用场景。3. **负载开关:** 在需要对负载进行高效控制的领域,如便携式设备或负电压负载开关模块,APM2323AAC-TRL-VB可用于负载开关,提供可靠的电流调节和保护功能。**封装:** SOT23。

2024/3/8洛谷刷题(模拟与高精度)-程序员宅基地

文章浏览阅读353次,点赞4次,收藏7次。先特判1,如果是1不输出,但是是-1的话要输出-号,所以就是(n-&&i)但是-1在常数项的时候可以出现,所以其实我们就知道了,只要是最后一项,除了0都可以输出, 而且其他系数除一外也是直接输出所以就是(abs(n)>1||i==0)1.第一考虑的肯定就是+或-号的输出啦,负数自带符号,所以只用考虑+号的输出,不用输出的有第一项和非正数(0的话也不用),0的话整项不见,第一项和负数的话我们直接输出,所以条件为(i!2.如何接下来就是考虑系数的输出了,系数特判1和-1,遇到这种一般会用到abs来解决。

随便推点

ARM指令流水线和ARM存储加载指令-程序员宅基地

文章浏览阅读1.2k次。ARM寄存器之SPSR(保存当前程序状态寄存器) 位宽也是32位,用来保存CPSR,当CPU正在运行某个进程,此时CPU的工作模式为 +User模式,此时UART控制器给CPU发送一个IRQ中断,CPU相应IRQ中断,伴随着CPU由User模式切换到IRQ模式,但是在切 +换之前,应该保存当前进程的运行状态(否则将来再返回就没法继续运行),只需将cpsr保存在IRQ模式下的spsr下,将来中断处理完毕以 +后,再将IRQ模式下的spsr给cpsr,恢复到之前被打断的进程的状态。=0,使能IRQ中断。

flex和java之间的自定义对象转换_java flx转成对象-程序员宅基地

文章浏览阅读1.4k次。http://www.1v5.com/blog/?action=show&id=81flex和java之间的自定义对象转换准备用Flex+LCDS+Spring+Hibernate做一个OA系统因为刚接触Flex所以很多问题都很迷茫昨天试了一下Flex通过_java flx转成对象

GridView控件属性及应用(转载)-程序员宅基地

文章浏览阅读645次。1.GridView控件的属性GridView支持大量属性,这些属性属于如下几大类:行为、可视化设置、样式、状态和模板。行为属性描述AllowPaging指示该控件是否支持分页。AllowSorting指示该控件是否支持排序。AutoGenerateColumn..._avicvxegrid 组件那个属性是存的是数据

ubuntu 16.04下安装docker后,执行docker出现权限不足的解决办法_linux docker: you are not authorized to perform th-程序员宅基地

文章浏览阅读1.7k次。ubuntu 16.04下安装docker,具体可见下面的连接:https://blog.csdn.net/jinking01/article/details/82490688使用sudo安装docker完成后,普通用户执行docker ps,报错connect: permission denied,链接权限被拒绝。具体解决办法为:1.添加当前用户到docker 用户组sudo gpasswd -a ${USER} docker2.查看用户组下用户,检查添加是否成功cat /etc/grou_linux docker: you are not authorized to perform this operation: server retur

离群值是什么意思_学术必备!代谢组学及数据分析相关问题汇总-程序员宅基地

文章浏览阅读2.2k次。为方便大家快速地掌握代谢组学及数据分析相关知识,现把咨询我们的有关代谢组学及数据分析的一些问题给大家整理出来,供大家参考。1.PCA:loading图,P=COSα中P代表什么意思?The loading, p, for a selected PCA dimension, represent the importance of the X variables in that dimension。2..._代谢组学pca有一组样品离散

STM32·HAL库开发(十八)不同芯片间程序的移植——案例:STM32F103C8T6程序移植到STM32F103RCT6_基于hal库的stm32ct86和stm32rct6能移植嘛-程序员宅基地

文章浏览阅读733次。不同芯片间程序的移植——案例:STM32F103C8T6程序移植到STM32F103RCT6_基于hal库的stm32ct86和stm32rct6能移植嘛

推荐文章

热门文章

相关标签