- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C14_递归动态显示hanio汉诺塔的搬运过程-VisualStudioC中的C程序设计
递归动态显示hanio汉诺塔的搬运过程-Visual Studio C++中的C程序设计//在Visual C++6.0中运行只要删除第一行#include stdafx.h#includestdio.h#includestdlib.h#includeWindows.h#includeconio.h#define Y0 20//纵坐标#define X0 60//宽度#define N 10//最大碟数#define dt 100//移动一次的时间#pragma warning(disable:4996)typedefstruct{int x;//针的位置int h;//针上的碟数char c[N];//碟编号ABC...}needle;voidgotoxy(int x, int y){ COORD coord = {x, y}; HANDLE hcop=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hcop, coord);}voidMoveUp(needle *na){//从针中抽出char c;intx,y,ys,ye,h;h=na-h;c=na-c[h-1];x=na-x;ys=Y0-h+1;ye=Y0-N+1;for(y=ys;y=ye;y--){gotoxy(x,y);putchar(|);gotoxy(x,y-1);putchar(c);Sleep(dt);}}voidMoveDown(needle *na,needle *nb){//插入针中char c;intx,y,ys,ye,h;h=na-h;c=na-c[h-1];h=nb-h;x=nb-x;ys=Y0-N;ye=Y0-h;gotoxy(x,ys++);putchar( );for(y=ys;yye;y++){gotoxy(x,y);putchar(|);gotoxy(x,y+1);putchar(c);Sleep(dt);}}voidMoveRight(needle *na,needle *nb){//从左到右搬运char c;intx,y,xs,xe,h;h=na-h;c=na-c[h-1];y=Y0-N;xs=na-x;xe=nb-x;for(x=xs;xxe;x++){gotoxy(x,y);putchar( );gotoxy(x+1,y);putchar(c);Sleep(dt/2);}}voidMoveLeft(needle *na,needle *nb){//从右到左搬运char c;intx,y,xs,xe,h;h=na-h;c=na-c[h-1];y=Y0-N;xs=na-x;xe=nb-x;for(x=xs;xxe;x--){gotoxy(x,y);putchar( );gotoxy(x-1,y);putchar(c);Sleep(dt/2);}}void show(needle *na,needle *nb){//从一针到另一针的搬运char c;intha,hb;ha=na-h;hb=nb-h;if(na-xnb-x){MoveUp(na);MoveRight(na,nb);MoveDown(na,nb);}else{MoveUp(na);MoveLeft(na,nb);MoveDown(na,nb);}c=na-c[ha-1];na-c[ha-1]=0; na-h--;nb-c[hb]=c; nb-c[hb+1]=0; nb-h++;}voidhanoi(needle *na,needle *nb,needle *nc,int n){//递归实现汉诺塔if(n==1)show(na,nc);else{hanoi(na,nc,nb,n-1);show(na,nc);hanoi(nb,na,nc,n-1); }}voidInit(needle *na,needle *nb,needle *nc,int n){//初始化变量inti,j,s,e,x,y;for(i=0;in;i++)na-c[i]=A+n-1-i;na-c[i]=0;na-x=X0/3; na-h=n;nb-c[0]=0;nb-x=X0/3*2; nb-h=0;nc-c[0]=0; nc-x=X0/3*3; nc-h=0;x=X0/3;//三空针for(y=Y0-N+1;y=Y0;y++){for(j=1;j=3;j++){gotoxy(x*j,y);putchar(|);}}s=Y0-n,e=Y0;//a针上有n碟for(i=n-1;i=0;i--){y=Y0-i;gotoxy(x,y);putchar(na-c[n-y+s]);}}void main( ){ int n;n
文档评论(0)