汉诺塔的非递归演示动画Word文档下载推荐.docx
- 文档编号:14152477
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:7
- 大小:16.55KB
汉诺塔的非递归演示动画Word文档下载推荐.docx
《汉诺塔的非递归演示动画Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汉诺塔的非递归演示动画Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
char*err[10];
interrs=0;
voidiniterror_debug(){
inti;
for(i=0;
i<
10;
i++)err[i]=NULL;
}
voiderror_debug(char*a){
if(errs>
9)return;
err[errs]=(char*)malloc(strlen(a)+1);
strcpy(err[errs],a);
printf(a);
errs++;
voidreport_debug(){
if(!
errs)return;
errs;
i++){
printf(err[i]);
free(err[i]);
}
#else
#defineerror(x)
#definereport()
#defineiniterror()
#endif
aboutstack
#defineSTACK_SIZE31
typedefstruct{
intdata[STACK_SIZE];
inttop;
}stack;
intclear(stack*a);
intcreate(stack**a);
intpush(stack*a,intdata);
intpop(stack*a,int*data);
intgettop(stack*a,int*data);
intdispose(stack*a);
intpop(stack*a,int*data){
if(a->
top){
*data=a->
data[--a->
top];
return1;
}else{
error("
pop(stack*,int*):
stackempty!
\n"
);
return0;
intpush(stack*a,intdata){
top<
STACK_SIZE){
a->
data[a->
top++]=data;
}else{
push(stack*,int):
stackfull!
intcreate(stack**a){
*a=(stack*)malloc(sizeof(stack));
if(*a)returnclear(*a);
else{
create(stack**):
createerror!
Notenoughmomery!
intclear(stack*a){
if(a){
top=0;
clear(stack*):
stacknotexist!
intgettop(stack*a,int*data){
top-1];
gettop(stack*,int*):
intdispose(stack*a){
free(a);
dispose(stack*):
/**************************************/
aboutHanoithegame
graphics.h>
dos.h>
#defineMAX_LEVELSTACK_SIZE
intposition[MAX_LEVEL+1];
stack*theStack[3];
intdepth;
intmode;
intprint;
intinitgame(intd){
intx,y;
inth=5;
intw;
initerror();
if(mode){
intgdriver=DETECT,gmode,errorcode;
/*initializegraphicsmode*/
initgraph(&
gdriver,&
gmode,"
"
setfillstyle(1,7);
3;
i++)
create(&
theStack[i]))
break;
if(i!
=3){
for(;
i>
=0;
i--)dispose(theStack[i]);
initgame(int):
cannotinitstack!
depth=d;
for(i=d;
i;
i--){
push(theStack[0],i);
y=200+100-theStack[0]->
top*(h+1);
w=i*10;
x=150-w/2;
setcolor(i);
setfillstyle(1,i);
bar(x,y,x+w,y+h);
position[i]=0;
setcolor(15);
rectangle(150+i*150-1,120,150+i*150+1,300);
line(50,300,500,300);
intendgame(){
inti=2;
printf("
report:
report();
if(mode)closegraph();
voidshow(intp,intfrom,intto){
intnewx,newy;
intw=p*10;
y=200+100-(theStack[from]->
top+1)*(h+1);
x=from*150+150-w/2;
newx=to*150+150-w/2;
newy=200+100-theStack[to]->
while(y>
100){
setcolor(0);
setfillstyle(1,0);
y-=(h+1);
rectangle(150+from*150-1,120,150+from*150+1,300);
setcolor(p);
setfillstyle(1,p);
delay(10);
while(x!
=newx){
(x>
newx)?
x--:
x++;
delay
(2);
while(y<
newy){
rectangle(150+to*150-1,120,150+to*150+1,300);
y+=(h+1);
intmove(intp){
intt,s;
gettop(theStack[position[p>
&
t)){
move(int):
thestackisempty\n"
if(t==p){
pop(theStack[position[p>
t);
mode&
&
print)printf("
%c->
"
'
A'
+position[p]);
/*anotherimportantcoreline*/
s=(position[p]+1+(depth%2?
p%2:
(p+1)%2))%3;
if(gettop(theStack[s],&
t)&
t<
p){
cannotmovebiglevelabovesmallone\n"
push(theStack[s],p);
if(mode)show(p,position[p],s);
elseif(print)printf("
%c\t"
+s);
position[p]=s;
}elseerror("
positionerror\n"
intmove2(intp){
if(print)printf("
%c->
+position[p],'
conio.h>
voidmain(){
unsignedlongi;
unsignedlongN=10;
unsignedlongp,q;
p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汉诺塔 递归 演示 动画