递归中德汉诺塔游戏代码?求助!

liuyang201 2007-12-29 04:23:39
我又本书不过,输入时代码错误! 还又模板上要添加什么工具!
留下什么字符!????、
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2007-12-30
  • 打赏
  • 举报
回复
或者:

Sub HANNOI()
Const N = 4
ReDim arr(1 To 2 ^ N - 1)
Hanoi1 N, "A", "B", "C", 0, arr
MsgBox Join(arr, vbCrLf)
End Sub
Private Sub Hanoi1(ByVal N%, ByVal A$, ByVal B$, ByVal C$, ByRef q, ByRef arr())
'“A → C” 来代表把金片从A针移动到C针,即1阶汉诺塔问题的解
If N = 1 Then
q = q + 1: arr(q) = A & "→" & C '把金片n从A移动到C
Else
Hanoi1 N - 1, A, C, B, q, arr 'n-1个金片从A到B,以C为过渡
q = q + 1: arr(q) = A & "→" & C '把金片n从A移动到C
Hanoi1 N - 1, B, A, C, q, arr 'n-1个金片从B到C,以A为过渡
End If
End Sub
northwolves 2007-12-30
  • 打赏
  • 举报
回复
这样可能更好理解一些:

Dim count As Long
Sub HANNUOTA()
count = 0
MOVEALL 4, 4, "A", "B", "C"
End Sub
Sub MOVEALL(ByVal TOTAL As Long, ByVal N As Long, ByVal A As String, ByVal B As String, ByVal C As String)
If N = 1 Then
MOVEONE TOTAL, 1, A, C
Else
MOVEALL TOTAL, N - 1, A, C, B
MOVEONE TOTAL, N, A, C
MOVEALL TOTAL, N - 1, B, A, C
End If
End Sub

Sub MOVEONE(ByVal TOTAL As Long, ByVal N As Integer, ByVal X As String, ByVal Y As String)
count = count + 1
Debug.Print "STEP " & count & ": " & vbTab & " MOVE " & N & " FROM " & X & " TO " & Y
End Sub


返回:

STEP 1: MOVE 1 FROM A TO B
STEP 2: MOVE 2 FROM A TO C
STEP 3: MOVE 1 FROM B TO C
STEP 4: MOVE 3 FROM A TO B
STEP 5: MOVE 1 FROM C TO A
STEP 6: MOVE 2 FROM C TO B
STEP 7: MOVE 1 FROM A TO B
STEP 8: MOVE 4 FROM A TO C
STEP 9: MOVE 1 FROM B TO C
STEP 10: MOVE 2 FROM B TO A
STEP 11: MOVE 1 FROM C TO A
STEP 12: MOVE 3 FROM B TO C
STEP 13: MOVE 1 FROM A TO B
STEP 14: MOVE 2 FROM A TO C
STEP 15: MOVE 1 FROM B TO C
chensijian 2007-12-29
  • 打赏
  • 举报
回复
不懂,和题目一起看就更晕了
波导终结者 2007-12-29
  • 打赏
  • 举报
回复
完全听不懂

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧