用c语言代码写的汉诺塔问题,用堆栈来实现。
算法思想
对于汉诺塔问题,当只移动一个圆盘时,圆盘直接从A针移动到C针..如果移动的磁盘是n(n & gt;1),分为几个步骤:将(n-1)个碟片从A针移动到B针(借助C针);织针A上的最后一个圆盘移动到织针C;(n-1)B针上的圆盘被移动到C针上(在A针的帮助下)。每做一次,动盘就少一个,逐渐减少。最后,当n为1时,整个移动过程完成。
因此,可以设计一个递归函数来求解汉诺塔问题,圆盘的整个移动过程都可以通过递归来实现。解决问题的过程是对实际操作的模拟。
程序代码
# include & ltstdio.h & gt
int main()
{
int hanoi(int,char,char,char);
int n,counter
printf("输入磁盘数量:");
scanf("%d ",& ampn);
printf(" \ n ");
counter=hanoi(n,' A ',' B ',' C ');
返回0;
}
int hanoi(int n,char x,char y,char z)
{
int move(char,int,char);
如果(n==1)
move(x,1,z);
其他
{
河内(n-1,x,z,y);
移动(x,n,z);
河内(n-1,y,x,z);
}
返回0;
}
int move(char getone,int n,char putone)
{
静态int k = 1;
printf("%2d:%3d # %c - %c\n ",k,n,getone,putone);
如果(k++%3==0)
printf(" \ n ");
返回0;
}