问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急!Hanoi塔问题的动画演示

发布网友 发布时间:2022-05-20 19:40

我来回答

2个回答

热心网友 时间:2023-11-18 08:38

/*5. 源程序*/
/********hanoi.c*********/
#include <graphics.h>
struct H
{
int data[15];/*存放每个盘的代号*/
int top;/*每个塔的具体高度*/
}num[3];/*三个塔*/
void move(char x,char y,struct H num[3]);/*移动的具体过程*/
void hanoi(char x,char y,char z,int n,struct H num[3]);/*递归*/
void Init(void);/*初始化*/
void Close(void);/*图形关闭*/
int computer=1;/*自动控制与手动控制的标志*/
int speed=0;/*全局变量speed主要是演示过程的速度*/
void main(void)
{
Init();/*初始状态*/
Close();/*图形关闭*/
exit(0);
}
void Init(void)/*初始化*/
{
int gd=DETECT,gm;
int i,n,color;
clrscr();
printf("please input n(n<=10): ");/*输入要演示的盘子数*/
scanf("%d",&n);
printf("Please input 1 or 2:\n1.computer 2.people\n");
scanf("%d",&i);
if(i==2)/*选择手动控制标志为0*/
computer=0;
if(n<1||n>10)
n=10;/*越界的话n当10处理*/
if(computer)/*如果是自动控制的话输入速度*/
{
printf("please input speed: ");/*输入速度*/
scanf("%d",&speed);
}
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
for(i=0;i<3;i++)
num[i].top=-1;/*三个地方的高度开始都为-1*/
for(i=0;i<n;i++)/*画一开始的塔座A上的盘子*/
{
num[0].top++;/*栈的高度加1*/
num[0].data[num[0].top]=i; /*最大的盘子代号为0,依次为1,2,…n-1*/
color=num[0].data[num[0].top]+1;/*盘子的颜色代码为栈顶盘子代号加1*/
setfillstyle(SOLID_FILL,color);
bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+
(33-3*num[0].data[num[0].top]),400-20*i+8); /*画矩形*/
}
setcolor(YELLOW);
outtextxy(180,450,"any key to continue");
settextstyle(0,0,2);
outtextxy(90,420,"A"); /*塔座标志*/
outtextxy(240,420,"B");
outtextxy(390,420,"C");
getch();/*接收字符后就执行递归操作*/
hanoi('a','b','c',n,num);
}
void move(char x,char y,struct H num[3])/*移动的具体过程*/
{
int i;
char num1[3],num2[3];
sprintf(num1,"%c",x-32);/*将小写变成大写,并转换成字符串输出*/
sprintf(num2,"%c",y-32);
setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/
bar(0,0,640,60);
setcolor(RED);
outtextxy(150,30,num1);/*输出移动过程*/
outtextxy(200,30,"--->");
outtextxy(310,30,num2);
settextstyle(0,0,2);
setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/
bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),
400-20*num[x-97].top-8,100+150*(x-97)+(33-3*
num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);
num[y-97].top++;/*入栈,目标点的top加1*/
num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目标点盘子的代号与源点盘子的代号相同*/
num[x-97].top--;/*出栈,原来地方的top减1*/
setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盘子颜色代码是栈顶盘子代号加1*/
bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-97].top]),
400-20*num[y-97].top-8,100+150*(y-97)+
(33-3*num[y-97].data[num[y-97].top]),400-20*num[y-97].top+8);
if(computer)/*自动控制就用delay*/
delay(speed);/*延时函数*/
else
getch();/*手动控制的话就自己按键盘来控制*/
}
void hanoi(char one,char two,char three,int n,struct H num[3])/*递归n为盘子数,num为堆栈*/
{
if(n==1)
move(one,three,num);/*如果盘子为1,将这个盘子从塔座A移动到塔座C*/
else
{
hanoi(one,three,two,n-1,num);/*将塔座A的前n-1个盘子移到塔座B*/
move(one,three,num);/*将塔座A的第n个盘子移到塔座C*/
hanoi(two,one,three,n-1,num); /*将塔座B的n-1个盘子移到塔座C*/
}
}
void Close(void)/*图形关闭*/
{
getch();
closegraph();
}

上面的不是我写的,你比较幸运,刚好我这里有现成的
这里共有包括冒泡法排序等23个演示程序

热心网友 时间:2023-11-18 08:39

那得看你有多少个盘子了
如果我没记错的话:
如果有64个盘子用一个巨型机来算好象只要算一万年就能算出来了,不知道你那些观众有那么多耐心没?
如果用TC2.0做的话
我书上倒有个现成的要不?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
吃干燥剂会有什么反应 干燥剂不慎食用怎么办 于冕被流放多少时间才回来 石羊场客运站坐几路公汽到成都市龙潭社区保平村九组? 从成都石羊场到龙潭寺北湖客运站做地铁公交咋个赶车呀?老师们_百度知 ... 成都理工大学坐车到石羊场客运站怎么走?大概要多久啊?谢谢!! 请问一下成都理工大学到石羊车站怎么做车啊? 还在盲目护理毛孔吗?如何正确护理毛孔? 毛孔粗大该如何处理? 脸t区毛孔粗大怎么办 毛孔粗大的原因是什么 我想在北京注册办理个人工作室,个体公司的执照多少钱。 C#汉诺塔动画 手帐的工具在哪买?(新台子的) 安旗蛋糕8英寸多少钱 金字旁上面白下面木什么字 哪个看码高手帮我看看这 正品耐克 詹姆斯11代兵马俑篮球鞋 10代男子LEBRON XI LBJ1 现在的英国首相是谁? 英国第一届首相是谁 英国的历任首相都是谁? 詹姆斯十代和詹姆斯十一代哪个适合打水泥地,去香港买詹姆斯十代的话,大概多少港币,十一代呢? 女人最嫩最水灵的是不是18岁 上届英国首相是谁 生在80后的女人性生活是怎样认识的 看到淘宝有很多卖詹姆斯十一代的只卖一两百。看评价都说好,是真货吗? 我上网看了詹姆斯十一代鸳鸯版、兵马俑版、涂鸦版的要二百多。到了其它所网站要一千多。这是怎么情况?! 詹姆斯十一代涂鸦。 80岁女人还能做几次 一个金一个白是什么字 英国现任首相和上一任首相是谁? 楚至磨组什么词? 8寸的蛋糕大约要多少钱? 求汉诺塔c语言动画演示程序 动态演示汉诺塔算法的实现过程 在北京开工作室怎么去注册啊,需要多少钱,都交什么费 如何用matlab实现汉诺塔的动画过程? 汉诺塔c语言 动画演示 地址1162765886@qq.com 谁有汉诺塔游戏(带动画)c语言源代码(? 汉诺塔递归问题 用计算机画图要怎么样从最基础的一步步学起? 拇外翻怎样手术治疗 拇外翻的治疗方式有哪些,手术后可能面对什么风险,需要注意什么问题? 拇外翻的治疗方法有哪些? 法拍房有房本可以公积金贷款吗? 买的有房本的旧房能用住房公积金贷款吗?手续复杂吗? 治疗拇外翻比较好方法有什么? 拇外翻整形手术的特点有哪些呢 我想用房本一次性贷款住房公积金! 竹笋怎么剥剥到什么程度 毛竹笋怎么剥视频 中国“天问一号”即将飞往火星,这对我国航天会带来怎样的影响?