用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;

}