#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);
getch();
}
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();
}
温馨提示:答案为网友推荐,仅供参考