河内塔怎么玩?

汉诺塔算法简介:

一位美国学者发现了一个特别简单的方法:把下面的方法轮流用两次就可以了。

将三根柱子按“针”字形依次排列,将所有磁盘按降序放在A柱上,根据磁盘数确定出柱顺序:

如果n是偶数,则顺时针放置如下:ABC;如果n是奇数,它将被顺时针放置为:ACB。这样经过反复测试,河内塔的移动就可以按照规定完成了。

所以很简单,结果就是按照移动规则把金块往一个方向移动:

如河内三阶塔的运动:A → C,A → B,C → B,A → C,B → A,B→A,B → C,A → C。

扩展数据:

汉诺塔经典话题:

相邻的三列,编号为A、B、C、A,从下到上用N个大小不同的圆盘叠成金字塔形状。所有的磁盘都要一个一个的移动到B列,不允许每次移动同一列时大磁盘都在小磁盘上面。

我们至少需要移动几次,设移动次数为H(n)。

将上面的n-1块板移到C列,将最大的一块放在B上,将C上的所有板移到B上,由此得到表达式:

H⑴ = 1

H(n)= 2 * H(n-1)+1(n & gt;1)

很快我们就可以得到H(n)的通式:

2^n-1(n & gt;0)

而且这个方法确实是次数最少的,证明很简单,可以试着从两块板的运动开始,可以试试。

进一步深化问题:

如果每种尺寸有两个盘子,并且它们相邻,那么盘子的数量是2n。问:(1)如果不考虑同样大小的盘子要上下移动多少次,设移动次数为j(n);⑵只要最后一个B上同样大小的盘子的顺序与最后一个A上的顺序相同,就需要移动几次,移动次数为K(n)。

(1)移动相当于将上一个问题中的每个板块再移动一次,即:

j(n)= 2 * h(n)= 2*(2^n-1)= 2^(n+1)-2

在分析[2]之前,我们先解释一个现象。如果A列上有两个大小相同的盘子,上面的是黑色的,下面的是白色的,我们需要将这两个盘子移动到B列两次。

盘子的顺序会变成下面黑,上面白,然后B上的盘子移动两次到C上,盘子的顺序就和a上的一样了,由此我们得出结论,相邻的两个盘子连移动几次,盘子的顺序都不会变,否则就是颠倒了。

回到最初的问题,n盘移动时,上面n-1盘的移动总数是2*H(n-1),所以上面n-1盘的移动数一定是偶数,最后一盘一定是1。

讨论问题(2):

综上所述,可以得出结论,要把A上的2n个盘子移动到B上,可以得出结论,上面的2n-2个盘子必须移动偶数次,所以顺序不变,移动次数为:

J(n-1) = 2^n-2

然后将倒数第二块板移动2 * j(n-1)+1 = 2(n+1)-3。

最后移动底板,因此移动总数为:

k(n)= 2 *(2 * j(n-1)+1)+1 = 2*(2^(n+1)-3)+1 = 2^(n+2)-5

参考资料:

汉诺塔(益智玩具)-百度百科