




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汉诺塔的C/C+程序2009-11-05 09:58:08| 分类: 默认分类 | 标签:无|字号大中小订阅借鉴+创新=succes 我已调试成功,新手望指教/ hanoizjqendend.cpp : Defines the entry point for the console application./zjq/ 9:18/11/4/2009/profit:先搭架构再填函数/ 递归的思想:一个出口+一个关系/ 函数入口是形参,出口是return(只有一个返回值)或指针|引用(直接改变内存值)/ 注意全局变量的应用好处/ 灵活的思维+好的习惯/ return 0;和break;都有中断异情的作用,灵活用之#include #include #include struct layer int numOfTower; int Layer12;struct Hanoi struct layer a; struct layer b; struct layer c; ;struct Hanoi H=1,1,2,3,4,5,6,7,8,9,10,11,12,2,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0;/初始化/,/;/void hanoi(int n,struct layer*pre,struct layer*mid,struct layer*end);void displayOfNum(int n,struct layer*pre,struct layer*mid,struct layer*end);/步骤d数字显示void move2end(int n_bottom,struct layer*pre,struct layer*mid,struct layer*end);int createHanoi();void displayOfImage(int m,struct layer*pre,struct layer*mid,struct layer*end);/步骤d图像显示void Delay(int seconds) ;/delay functionvoid moveLayer(int m,struct layer*pre,struct layer*mid,struct layer*end);/塔层移动:改变layer值void starplay(int m);/每次输出m个“*”int sumOfStep=0;/record the stepsint n=0;struct layer*pre=&H.a; /initializationstruct layer*mid=&H.b; /将柱子的编号地址交给指针struct layer*end=&H.c;main() n=createHanoi(); /创建的塔层数 hanoi(n,pre,mid,end); cout总共步数:sumOfStependl; /setw(n) 右对齐 return 0;/汉诺塔递归函数void hanoi(int n,struct layer*pre,struct layer*mid,struct layer*end)/修改一定是依据形参进行的,里面形参决定一切 /递归的同一个函数关系: /hanoi(int n,int*pre,int*mid,int*end) /只要将其他的要求解的函数对应的参数传 /递过来就好了 if(n=1) /递归出口:初始值/初始步骤 /递归一定要有出口 /this is important/ displayOfNum(1,pre,mid,end); /函数运行到出口就回到下一步了 moveLayer(0,pre,mid,end); /记录塔层移动后的塔层分布,i.e layer的重新赋值 displayOfImage(0,pre,mid,end); else /递归精髓1个出口 + 1个f(n)与f(n-1)的关系 hanoi(n-1,pre,end,mid); /f(n)与f(n-1)的循环关系 move2end(n,pre,mid,end); /实为move2end(n,pre,end),中间mid是为了显示用的; hanoi(n-1,mid,pre,end); /步骤的数字显示void displayOfNum(int n,struct layer*pre,struct layer*mid,struct layer*end) cout(*pre).numOfTower(*end).numOfTowerendl; sumOfStep+;/A底到C底-move2endvoid move2end(int n_bottom,struct layer*pre,struct layer*mid,struct layer*end) cout(*pre).numOfTower(*end).numOfTowerendl; sumOfStep+; moveLayer(0,pre,mid,end); displayOfImage(0,pre,mid,end);/创建汉诺塔int createHanoi() int m; /m: the layers of beginningstart: coutinput the number of the hanoi tower(12):m; if(m12) coutthe number is outflow,please input again:endl; goto start; /return 0; return m;/图像显示void displayOfImage(int m,struct layer*pre,struct layer*mid,struct layer*end) /显示有问题,未掉过顺序来 for(m=0;mn;m+) if(*pre).numOfTower=1) starplay(*pre).Layerm); /(*pre).numOfTower来决定显示的顺序 else if(*mid).numOfTower=1) starplay(*mid).Layerm); else starplay(*end).Layerm);if(*pre).numOfTower=2) starplay(*pre).Layerm); /(*pre).numOfTower来决定显示的顺序 else if(*mid).numOfTower=2) starplay(*mid).Layerm); else starplay(*end).Layerm);if(*pre).numOfTower=3) starplay(*pre).Layerm); /(*pre).numOfTower来决定显示的顺序 else if(*mid).numOfTower=3) starplay(*mid).Layerm); else starplay(*end).Layerm); coutendl; /cout(*pre).Layer0(*mid).Layer2endl; Delay(1); /动态渐近显示 /coutsetw(3)* endlsetw(3)*endl;/塔层移动-分情况讨论,为零的情况有多种,1a=0,c=1 |2a=0,c=0 |3a=1,c=1 |4a=1,c=1void moveLayer(int m,struct layer*pre,struct layer*mid,struct layer*end) int i,j; for(i=m;in;i+) if(*pre).Layern-1=0) i=n-1; break; else if(*pre).Layeri!=0) break; for(j=m;jn;j+) if(*end).Layern-1=0) j=n-1; break; else if(*end).Layerj=0&(*end).Layerj+1!=0) break; (*end).Layerj=(*pre).Layeri; (*pre).Layeri=0;/延时程序void Delay(int seconds)/延时seconds秒的程序 入口 delay(int n),强制延时 clock_t start=clock();/像计数器 clock_t lay=(clock_t)seconds*CLOCKS_PER_SEC; while(clock()-start)lay);/星星显示void starplay(int j) int maxLayer=2*n-1; int numOfOut=(2*j-1); int blankNum1=(maxLayer-numOfOut)/2;/空格数 int blankNu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年制造业数字化转型数据治理:构建数据共享与开放生态
- 2025年环保纸包装产品市场趋势与消费者行为分析
- 脂溢性脱发成因研究-洞察及研究
- 新能源汽车行业2025年市场趋势分析报告:310亿规模乘用车市场占比3%
- 重难点自考专业(市场营销学)(原创题)附答案
- 商业地产项目2025年旅游目的地定位与招商运营策略研究报告
- 重难点自考专业(行政管理)试题附答案(完整版)
- 自考专业(护理)能力检测试卷及答案详解【新】
- 自考专业(公共关系)通关考试题库含答案详解【能力提升】
- 注册公用设备工程师复习提分资料含答案详解【夺分金卷】
- 水泥路施工安全知识培训课件
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- 2025年金融消费者权益保护考试题与答案
- 中学2025年秋季第一学期开学工作方案
- 《跨越百年的美丽》课件 中职语文上册
- GB 11122-2025柴油机油
- 2025年广西中考语文试题卷(含答案)
- 表单-公司董监高、股东、核心技术人员调查表(上市或尽调使用)
评论
0/150
提交评论