河内之塔
来源:互联网 发布:网络剧项目计划书 编辑:程序博客网 时间:2024/04/30 03:20
河内之塔
说明
河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时
北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世
纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64
个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根
石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬
运完毕之时,此塔将毁损,而也就是世界末日来临之时。
解法如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘
子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处
理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式
的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则
64
如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。
#include <stdio.h>
#include <stdlib.h>
void move(int n,char a,char b,char c)
{
if(n==1)
printf("%c-->%c/n",a,c);
else
{
move(n-1,a,c,b);//(n-1)个盘子从a借助C放到b
printf("%c-->%c/n",a,c);//把第N个盘子从a移到c
move(n-1,b,a,c);//(n-1)个盘子从b借助a移到c
}
}
int main()
{
move(3,'A','B','C');
return 0;
}
- 河内之塔
- 河内之塔
- 河内之塔
- 河内之塔
- 河内之塔
- 河内之塔
- 1、河内之塔
- 河内之塔问题
- 河内之塔
- 河内之塔
- 汉诺塔||河内之塔
- 河内之塔
- 河内之塔
- 河内之塔
- 河内之塔算法
- 1.河内之塔
- 1,河内之塔
- 1. 河内之塔
- 关于eucalyptus命令问题
- 面向对象随想 -- 多用组合来代替继承
- 捕获iPhone程序的Crash
- Linux的MySQL操作
- 深入浅出Android的多线程
- 河内之塔
- READ_REPORT_LINE_TOO_LONG
- 欺骗!!
- EdoJS,简单、强大的JS框架!
- ARM切换到THUMB模式
- javascript数据类型
- va_list 详解
- 硬盘安装ubuntu 10.4
- 硬盘安装ubuntu 10.4