河内塔(汉诺塔)

  第一个算法。河内塔。先介绍一下河内塔(又叫做汉诺塔)!

 
由来:
一位
法国
数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。  
用程序的解法思路:
 如果柱子设为ABC。要由A搬到C时。在只有一个盘子时。就将它直接搬到C,当有两个盘子时,就将B当做辅助柱。如果盘数超过2个时。将第三个以下的盘子遮起来,就恨简单了。每次处理两个盘子。也就是A->B,A->C,B->C这三个步骤,而被遮住的部分,其实就是进入了程序的递归处理了。事实上,若有n个盘子,则移动完毕所需之次数为2^n-1,所以当盘数为64时,则所需的次数为: 2^64 -1 ≈ 5000(世纪)。  
C语言解法:  

《河内塔(汉诺塔)》

先输入3个盘子运行一下:

 

《河内塔(汉诺塔)》

Java语言解法: 其实代码都一样。  

《河内塔(汉诺塔)》

运行结果:

《河内塔(汉诺塔)》

这里有个小游戏可以验证一下结果对不对:点击这里

 

如果有什么问题可以提出来,大家交流一下。我也是个菜鸟。第一篇算法,以后会陆续更新的。

我的新浪博客:http://blog.sina.com.cn/u/1847016777

我的qq空间:http://user.qzone.qq.com/583674718/

 

 

 

点赞