




已阅读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年哈尔滨市道里区爱建社区卫生服务中心招聘5人考前自测高频考点模拟试题及完整答案详解1套
- 2025吉林扶余市博物馆选调解说员4人考前自测高频考点模拟试题附答案详解
- 邢台市中医院医务人员手卫生与职业防护知识测试题
- 衡水市人民医院医联体合作模式运营方案设计试题
- 2025北京大学地球与空间科学学院智慧能源和公共安全研究中心招聘科研助理1人模拟试卷及答案详解(必刷)
- 2025福建福州东南汽车城投资发展集团有限公司(第一次)招聘14人模拟试卷及答案详解一套
- 衡水市中医院治疗计划剂量学评估与优化技巧试题
- 重庆市人民医院遗传性肾病咨询与家系管理考核
- 邯郸市人民医院神经内科护士晋升主管护师重症监护考核
- 2025年哈尔滨新区第二十四幼儿园招聘5人模拟试卷及答案详解(夺冠)
- 2025年辅警考试真题及答案
- 2025-2026学年统编版五年级上册语文第二单元过关试卷附答案(三套)
- 2025年农村土地租赁协议(合同样本)
- 2025年固态变压器(SST)行业研究报告及未来发展趋势预测
- 海上安全培训课课件
- 神经外科重症管理临床指南
- 少年读史记课件
- 2025年三力测试题试题及答案
- 思想道德与法治基础:第一章 领悟人生真谛 把握人生方向
- 小学语文人教四年级上册第四单元神话故事中的人物形象
- 《星际穿越》-课件
评论
0/150
提交评论