




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录1 课题需求32 概要设计32.1 递归32.2 非递归43 详细设计和实现44 调试与测试134.1 启动窗口134.2 递归实现134.3 非递归实现154.4 退出165 致谢176 参考文献182 概要设计汉诺塔是一个经典的问题,曾被称为“世界末日问题”。此次程序设计全面讨论了解决此问题的方案,详细研究,了解,解决问题的算法设计,给出了具体算法,最后由手工输入测试数,运用递归与非递归算法得出结果。2.1 递归若只有一个圆盘的话直接将圆盘移至C杆;若为N个圆盘的话将N-1个圆盘当作整体借助C杆移至B杆,将N号盘移至C杆,再借助A杆重复上面的操作即可将圆盘移至C杆。2.2 非递归看出二叉树实现,假设A一开始有n个圆盘,前n-1个A通过C移到B上看出左孩子,第n个移到C看出根,将B中n-1通过A移到C看成右孩子,建立完全二叉树。主要借助二叉树的非递归中序遍历方法实现,利用栈堆来实现。3 详细设计和实现DiGui.cpp文件:#include/递归法解决汉诺塔问题void HanNuoTaDiGui(int n,char a,char b,char c)if(n2)cout 圆盘n : 从a移到cendl;return;HanNuoTaDiGui(n-1,a,c,b);/n-1个圆盘移到bcout 圆盘n : 从a移到cendl;HanNuoTaDiGui(n-1,b,a,c);munu.cpp文件:/目录菜单#includevoid munu()cout*endl;cout*endlendl;cout 汉诺塔 endlendl;cout*endl;cout*endl;cout请选择实现的方法:endl;cout 1 代表递归方法。endl;cout 2 代表非递归方法。endl;cout 0 代表退出。endl;主程序:#include#include /from指要转移的盘子的柱子,pass指经过的中间柱子,aim指目的盘子所在的柱子struct Tree/树结点int n;char from;char pass;char aim;/构造函数Tree(int m,char a,char b,char c)n=m;from=a;pass=b;aim=c;Tree()/判断是否为空结点bool IsNullNode()if(n1)return true;return false;/栈,用来存放盘子class Stack Tree *data;int top;int maxSize;public:Stack(int sz);Stack();bool IsEmpty();/判断是否为空栈bool IsFull();/判断是否为满栈bool Push(Tree x);/进栈bool Push(int m,char a,char b,char c);/进栈bool Pop(Tree &x);/出栈bool GetTop(Tree &x);/取栈顶;Stack:Stack(int sz)/构造函数maxSize=sz;data=new TreemaxSize;top=-1;Stack:Stack()/析构函数delete data;/判断是否为空栈bool Stack:IsEmpty()if(top=-1)return true;return false;/判断是否为满栈bool Stack:IsFull()if(top=maxSize-1)return true;return false;/出栈bool Stack:Pop(Tree &x)if(IsEmpty()return false;x=datatop-;return true;bool Stack:Push(Tree x)if(IsFull()return false;data+top=x;return true; bool Stack:Push(int m,char a,char b,char c)if(IsFull()return false;top+;datatop.n=m;datatop.aim=c;datatop.from=a;datatop.pass=b;return true;bool Stack:GetTop(Tree &x)if(IsEmpty()return false;x=datatop;return true;/from指要转移的盘子,aim指目的盘子,pass指经过上午中间盘子void HanNuoTa(int n,char a,char b,char c)Stack s(n+1);Tree p;int i=1;s.Push(n,a,b,c);while(!s.IsEmpty()s.GetTop(p);while(!p.IsNullNode()s.Push(p.n-1,p.from,p.aim,p.pass);/左孩子 进栈s.GetTop(p);s.Pop(p);/退栈if(!s.IsEmpty()/栈不空s.Pop(p);/退栈cout第i+次t圆盘p.n p.fromp.aimendl;/输出s.Push(p.n-1,p.pass,p.from,p.aim);/右孩子void HanNuoTaDiGui(int n,char a,char b,char c);void munu();void main()system(color 1f); /*设置系统颜色,本系统为蓝底亮白色字*/munu();while(true)int n,num;coutn;switch(n)case 0:goto loop;case 1:/1代表递归方法coutnum;HanNuoTaDiGui(num,A,B,C);munu();break;case 2:/2代表非递归方法coutnum;HanNuoTa(num,A,B,C);munu();break;default:cout您的选择不符合要求,请重新输入!endl;break;loop:cout欢迎再次使用本程序!endl;4 调试与测试4.1 启动窗口4.2 递归实现输入圆盘个数为5(也可以是其他数,但不要太大,时间花销大)4.3 非递归实现输入圆盘个数为5(也可以是其他数,但不要太大,时间花销大)4.4 退出5 致谢*6 参考文献1 殷人昆.数据结构 用面向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030全球及中国音乐制作服务行业发展趋势分析与未来投资战略咨询研究报告
- 第十三章内能 单元测试卷(含答案) 2025-2026学年人教版九年级物理全一册
- 中石化中原油田招聘考试真题2024
- 2024年北京信息职业技术学院招聘真题
- 2025年智能制造的能源效率优化方案
- 2025年海洋能源利用技术创新:海水淡化反渗透膜材料高效转化研究
- 2025年海洋能发电技术国际合作与市场拓展研究报告
- 2025广西仙城投资发展集团有限公司第一次招聘人员考前自测高频考点模拟试题及参考答案详解一套
- 2025年4月北京门头沟区龙泉镇城市协管员招聘1人模拟试卷及答案详解(考点梳理)
- 2025广东韶关市南雄市司法局招聘1人模拟试卷及答案详解(典优)
- 沪教版九年级上册化学第三章《物质构成的奥秘》检测卷(含答案解析)
- 如何与客户建立有效的沟通
- 薯片加工项目规划设计方案
- 部编版小学数学六年级上册分数乘法应用题解法一:找单位“1”解析同步练习
- 职业教育课题申报:产教融合背景下职业院校“四位一体”校企合作模式研究与实践
- 现场监理安全检查记录
- 效益工资发放审批表
- 土壤的环境背景值与容量
- 民俗学概论授课ppt
- GB/T 26399-2011电力系统安全稳定控制技术导则
- 电动葫芦检查安装检查验收使用表格
评论
0/150
提交评论