源代码:
#include
void movedisc(unsigned n,char fromneedle,char toneedle,char usingneedle);
int i=0;
int main()
{
unsigned n;
printf("please enter the number of locomotive:");
scanf("%d",&n); //输入N值
printf("\tneedle:\t a\t b\t c\n");
movedisc(n,'a','c','b'); //从A上借助B将N个盘子移动到C上
//*********************************************************************
//在此处加入如下代码将C上的N个盘子再移回A 去掉此处代码即汉诺塔问题源代码
for(int j=1;j<=(int)n;j++)
{
i++;
printf("\t[%d]:\t%2d
}
//*********************************************************************
printf("\tTotal:\t%d\n",i);
scanf("%d",&n);
return 0;
}
void movedisc(unsigned n,char fromneedle,char toneedle,char usingneedle)
{
if(n>0)
{
//从fromneedle上借助toneedle将N-1个盘子移动到usingneedle上
movedisc(n-1,fromneedle,usingneedle,toneedle);
++i;
//将fromneedle 上的一个盘子移到toneedle上
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
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
break;
case 'b':
printf("\t[%d]:\t\t%2d
break;
}
break;
}
//从usingneedle上借助fromneedle将N-1个盘子移动到toneedle上
movedisc(n-1,usingneedle,toneedle,fromneedle);
}
}