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

求汉诺塔c语言动画演示程序

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

我来回答

2个回答

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

#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,"D:\\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();
}

演示过程在TC 下进行。。嘻嘻

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

各位实在是太抠了,楼主是想在图形模式下运行汉诺塔的演示动画吧,留个联系方式我给你发源程序
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
锅炉切圆直径调整 为什么我打开excel后是灰色的? 有没有什么值得推荐的投资港股的QDII基金? - 知乎 win10电脑屏幕亮度调不了怎么办 考焊工证具体怎么操作 广汽传祺是丰田技术吗 广汽传祺与广汽丰田有关系吗 怎样才能让不愿写作业的孩子听话? 上初中不写作业不想学习的孩子应该如何管教? 出生在2020年农历七月十二日的宝宝怎么取名有内涵? 多哈回合谈判各方呼吁 8寸的蛋糕大约要多少钱? 急!Hanoi塔问题的动画演示 我想在北京注册办理个人工作室,个体公司的执照多少钱。 C#汉诺塔动画 手帐的工具在哪买?(新台子的) 安旗蛋糕8英寸多少钱 金字旁上面白下面木什么字 哪个看码高手帮我看看这 正品耐克 詹姆斯11代兵马俑篮球鞋 10代男子LEBRON XI LBJ1 现在的英国首相是谁? 英国第一届首相是谁 英国的历任首相都是谁? 詹姆斯十代和詹姆斯十一代哪个适合打水泥地,去香港买詹姆斯十代的话,大概多少港币,十一代呢? 女人最嫩最水灵的是不是18岁 上届英国首相是谁 生在80后的女人性生活是怎样认识的 看到淘宝有很多卖詹姆斯十一代的只卖一两百。看评价都说好,是真货吗? 我上网看了詹姆斯十一代鸳鸯版、兵马俑版、涂鸦版的要二百多。到了其它所网站要一千多。这是怎么情况?! 詹姆斯十一代涂鸦。 80岁女人还能做几次 一个金一个白是什么字 动态演示汉诺塔算法的实现过程 在北京开工作室怎么去注册啊,需要多少钱,都交什么费 如何用matlab实现汉诺塔的动画过程? 汉诺塔c语言 动画演示 地址1162765886@qq.com 谁有汉诺塔游戏(带动画)c语言源代码(? 汉诺塔递归问题 用计算机画图要怎么样从最基础的一步步学起? 拇外翻怎样手术治疗 拇外翻的治疗方式有哪些,手术后可能面对什么风险,需要注意什么问题? 拇外翻的治疗方法有哪些? 法拍房有房本可以公积金贷款吗? 买的有房本的旧房能用住房公积金贷款吗?手续复杂吗? 治疗拇外翻比较好方法有什么? 拇外翻整形手术的特点有哪些呢 我想用房本一次性贷款住房公积金! 竹笋怎么剥剥到什么程度 毛竹笋怎么剥视频 中国“天问一号”即将飞往火星,这对我国航天会带来怎样的影响? 灵芝和什么搭配泡水喝治咳嗽 第一个环绕火星的太空船叫什么?