请输入您要查询的百科知识:

 

词条 梵塔
释义

简介

也称汉内塔,汉诺塔,河内塔。问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果恰如上题,面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。

关于梵塔

讲讲什么是梵塔问题,梵塔问题起源于中东地区的一个古老的传说:在梵城(Hana)地下有一个僧侣的秘密组织,他们有3个大型的塔柱,左边的塔柱上由方到小套着64个金盘。僧侣们的工作是要把这64个金盘从左边塔柱转移到右边塔柱上去。但转移过程有规定的:1、每次只能搬动一只盘子,盘十只能在3个塔柱上安放,不允许放在地上;2、在每个塔柱上,只允许把小盘十叠在大盘上,反之不允许。据传说,僧侣们完成这个任务时,世界的末日就来临了。19世纪,法国的一位数学家对该课题进行过研究,他指示,要完成这个任务,僧侣们搬动金盘的总次数:264-1=18446744073709551615(20位)假设僧侣们个个身强力壮,每天24小时不知头疲倦地工作,而且一秒钟移动一个金盘,那么,完成这个任务也得花5800亿年。为什么264-1是解决梵塔问题的最小步数呢?我想,是这样的,如果我们假设只有两个盘,有A(始塔),B(终塔),C(中间塔),那么从AB只需3次;如果有三个盘,那么先将前二个盘以C塔为目标圆柱,解放出第三个盘则需(X2+1)次,再重复两个盘时的情况,那么只需(X2+1+X2=2X2+1)次;以此类推则:X2=2+1X3=X2+1+X2……Xn=Xn-1+1+Xn-1即Xn=2(Xn-1+1)-1=2n-1

游戏

后来,这个传说就演变为汉诺塔游戏:

1.有三根杆子A,B,C。A杆上有若干碟子

2.每次移动一块碟子,小的只能叠在大的上面

3.把所有碟子从A杆全部移到C杆上

解决算法(C语言) /* Copyrighter by SS7E */

#include<stdio.h> /* Copyrighter by SS7E */

void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */

{

if(n==1)

{

printf("Move disk %d from %c to %c\",n,A,C);

}

else

{

hanoi(n-1,A,C,B); /* Copyrighter by SS7E */

printf("Move disk %d from %c to %c\",n,A,C);

hanoi(n-1,B,A,C); /* Copyrighter by SS7E */

}

}

main() /* Copyrighter by SS7E */

{

int n;

printf("请输入数字n以解决n阶汉诺塔问题:\");

scanf("%d",&n);

hanoi(n,'A','B','C');

}/* Copyrighter by SS7E */

如果按照最快的速度移动即不重复地移

想移动第二片金片则需要先移动第一片

想移动第三片金片则需要先移动第二片

.

.

.

想移动第64片需要先移动第63片

移动第一片需要1次

移动第二片需要3次(必须将第一片移到第二片上才能将第三片移下来)

移动第三片需要7次

移动第四片需要15次......

可以看出每想移动一片就需要将上边的所有片摞在一起

所以每移动一片都需要操作上一片次数的二倍+1(自己那片动)

所以由数列可知移动第n片需要2^n-1次

64片就需要2的64次方减1次

2的64次方...

如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子

从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上

不能出现大盘压小盘.找出移动次数最小的方案.

程序如下:

program fanta;

var

n:integer;

procedure move(n,a,b,c:integer);

begin

if n=1 then writeln(a,'--->',c)

else begin

move(n-1,a,c,b);

writeln(a,'--->',c);

move(n-1,b,a,c);

end;

end;

begin

write('Enter n=');

read(n);

move(n,1,2,3);

end.

的详细解析(pascal)

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/4/1 5:41:17