使用VBA求解汉诺塔问题| xxExcel
1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人xx)

这是在网站空间被误删前发的一个贴子,翻出来重新贴出。
据百度百科:
汉诺塔(又称河内塔)问题是印度的一个古老的传说。xxxx的神勃拉玛在一个庙里留下了三根金刚石的棒,{dy}根上面套着64个圆的金片,{zd0}的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。
后来,这个传说就演变为汉诺塔游戏:
1、有三根杆子A,B,C。A杆上有若干碟子
2、每次移动一块碟子,小的只能叠在大的上面
3、把所有碟子从A杆全部移到C杆上
经过研究发现,汉诺塔的xx很简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
此外,汉诺塔问题也是程序设计中的经典递归问题。
算法思路:
1、如果只有一个金片,则把该金片从源移动到目标棒,结束。
2、如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,{zh1}再把前n-1个移动到目标棒
- – - – - – - – - – - – - – - – -
这是一个很有趣的问题,也是一个迷人的问题,相信学过计算机特别是递归的朋友都熟悉这个经典的问题。问题简单描述如下:
设有3根标号为A,B,C的柱子,在A柱上放着n个盘子,每一个都比下面的略小一点,要求把A柱上的盘子全部移到C柱上,移动的规则是:(1)一次只能移动一个盘子;(2)移动过程中大盘子不能放在小盘子上面;(3)在移动过程中盘子可以放在A,B,C的任意一个柱子上。
其解答的基本思想是使用递归的方式:
1、1个盘子的汉诺塔问题可直接移动。
2、n个盘子的汉诺塔问题可递归表示为,首先把上边的n-1个盘子借助于C柱从A柱移到B柱,然后把最下边的一个盘子从A柱移到C柱,{zh1}把移到B柱的n-1个盘子借助于A柱再移到C柱。4个盘子汉诺塔问题的递归求解示意图如下图所示。

程序代码:

Option Explicit
Dim Counter As Integer
 
Sub GetMove()
    Dim n As Integer
    On Error Resume Next
    n = Application.InputBox(Prompt:="请输入一个代表要移动盘子的数量值:", _
                                  Title:="汉诺塔问题", _
                                  Type:=2)
    Call Move(n, "A", "B", "C")
End Sub
 
Sub Move(ByVal nValue As Integer, ByVal A As String, ByVal B As String, ByVal C As String)
        If nValue = 1 Then
            Counter = Counter + 1
            Debug.Print Counter & ":" & "将盘" & "1" & ":" & "从柱" & A & "移到柱" & C
        Else
            Call Move(nValue - 1, A, C, B)
            Counter = Counter + 1
            Debug.Print Counter & ":" & "将盘" & nValue & ":" & "从柱" & A & "移到柱" & C
            Call Move(nValue - 1, B, A, C)
        End If
End Sub

程序运行,将n值设置为4时的输出为:
1:将盘1:从柱A移到柱B
2:将盘2:从柱A移到柱C
3:将盘1:从柱B移到柱C
4:将盘3:从柱A移到柱B
5:将盘1:从柱C移到柱A
6:将盘2:从柱C移到柱B
7:将盘1:从柱A移到柱B
8:将盘4:从柱A移到柱C
9:将盘1:从柱B移到柱C
10:将盘2:从柱B移到柱A
11:将盘1:从柱C移到柱A
12:将盘3:从柱B移到柱C
13:将盘1:从柱A移到柱B
14:将盘2:从柱A移到柱C
15:将盘1:从柱B移到柱C

发表评论

郑重声明:资讯 【使用VBA求解汉诺塔问题| xxExcel】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——