标题:
C语言经典算法之汉诺塔1
[打印本页]
作者:
苹果也疯狂
时间:
2014-5-9 17:14
标题:
C语言经典算法之汉诺塔1
这是个汉诺塔程序,在调试的时候,输入的数字最好不要大于
15
,因为每大一个数
所得的结果的步骤都会多一倍。如果你有耐心等待结果的话除外。汉诺塔是在欧洲
流行的一种游戏,有
a,b,c
三个竿。
a
竿上有若干个由大到小的圆盘,大的在下面,
小的在上面,
b,c
都是空杆,请你把
a
杆上的圆盘都倒到别的杆上,或
b
或
c
,在倒盘
的过程中不可以大的压小的,实例程序如下:
#include <stdio.h>
int i=0;
main()
{
unsignedn;
printf("Pleaseenter the number of discs: ");
scanf("%d",&n);
printf("\tneedle:\ta\tb\t c\n");
movedisc(n,'a','c','b');
printf("\tTotal: %d\n",i);
getch();
}
movedisc(n,fromneedle,toneedle,usingneedle)
unsigned n;
char fromneedle,toneedle,usingneedle;
{
if(n>0)
{
movedisc(n-1,fromneedle,usingneedle,toneedle);
i++;
switch(fromneedle)
{
case 'a':switch(toneedle)
{
case'b':printf("\t[%d]:\t%2d------>%2d\n",i,n,n);
break;
case'c':printf("\t[%d]:\t%2d------------->%2d\n",i,n,n);
break;
}
break;
case 'b':switch(toneedle)
{
case'a':printf("\t[%d]:\t%2d<----------%2d\n",i,n,n);
break;
case'c':printf("\t[%d]:\t\t%2d------>%2d\n",i,n,n);
break;
}
break;
case 'c':switch(toneedle)
{
case'a':printf("\t[%d]:\t%2d<--------------%2d\n",i,n,n);
break;
case'b':printf("\t[%d]:\t\t%2d<--------%2d\n",i,n,n);
break;
}
break;
}
movedisc(n-1,usingneedle,toneedle,fromneedle);
}
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0