汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
面对此问题c语言用递归可实现,因外根据规则,只能实现小的放在大的上面,而且要实现转移,可以把另一个当做转移中介,比如有n个盘子,把n-1个放置在转移中介的柱子上,把第n个即最大的那个盘子放置在目的柱子,由递归可成n-2、n-3,由此可得代码
`#include<stdio.h>
void hanoi(int n,char A,char B,char C){
if(n==1)
printf("%c->%c\n",A,C);
else{
hanoi(n-1,A,C,B);
printf("%c->%c\n",A,C);
hanoi(n-1,B,A,C);
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
hanoi(n,‘A’,‘B’,‘C’);
}
return 0;
} `
但是实现题目中的64个盘子的转移,在时间上可不允许的
实现64个盘子转移需要转移2^64-1次,就算一秒中移动一个盘子也需要的时间也难以计量