急!Hanoi塔问题的动画演示

来源:百度知道 编辑:UC知道 时间:2024/04/30 03:28:20
有3个塔架,其中一个上放置若干个大小不一的盘子,放置的顺序是大盘子在下,小盘子在上。现在要将这些盘子移动到第3个塔架上,可以借助第2个塔架,要求每次只能搬动一个盘子,而且盘子只能放在塔架上。在移动过程中各个塔架上盘子的放置顺序仍是大盘子在下,小盘子在上。编写程序,实现这个问题的动画演示。
要求:
1.盘子数由用户输入(一般小于10个,较大时运行时间太长)
2.盘子可以简单图形或用符号表示
3.要演示出当前各个塔架的状态,以及被移动盘子的源架子和目标架子。
4.用户可以自行控制演示的速度。
5.3个塔架用3个栈来表示
6.若用符号如字符表示盘子,可以直接打印每个栈中的字符来显示栈的状态。
7.若用图形表示盘子,需要考虑将放入到塔架上的盘子画出来,将移走的盘子从原来的塔架上擦掉。盘子的大小是盘子自身的属性,盘子放置的位置由塔架上当前的盘子数(即栈的栈顶)决定。

首先:做一下用符号表示盘子时的程序
我试着看一下答案如何,好吗?

/*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