微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题汉诺塔问题的VB解决方案
栏目软件世界
作者赵玉勇
发布2001年26期
  著名的汉诺塔(Hanoi)问题是一个典型的递归问题。它像我们常说的老和尚讲故事,却又不仅仅那么简单,它可以认为是一种特殊的循环,并且如果不用递归程序的话,可能也没有其他的解决方法了。问题如下:
  有三根柱子A、B、C,A柱子上有64个圆环,圆环大小不等,大的在下,小的在上,要求将这64个圆环从A柱子移到C柱子,在移动过程中可借助B柱子,每次只准移动一个圆环,且在移动的过程中在三根柱子上都保持大盘在下小盘在上的局面。要求编程写出移动步骤。
   分析过程:
  通过总结,我们将n个圆环从A柱子移到C柱子可以分解为以下三个步骤:
  1.将A上n-1个圆环从C柱子先移到B柱子上。
  2.将A上剩下的一个盘移到C柱子上。
  3.将n-1个盘从B柱子上借助A柱子移到C柱子上。
  通过归纳,上面的三个问题又可总结成两个问题:
  1.将n-1个盘从一根柱子移到另一根柱子(n>1),这是一个递归过程。
  2.将1个圆环从一根柱子移到另一根柱子。
  因此,第1个问题通过子程序hano()来实现,第2个问题通过子程序movet()来实现。
  '汉诺塔问题源程序
  Private Sub movet(getone As String,putone As String) '从一根柱子移到另一根柱子的子程序
  TxtList.Text=TxtList.Text+getone+"->"+putone+vbCr+vbLf '输出
  End Sub
  Private Sub hano(n As Integer,one As String,two As String,three As String) '从一根柱子移动n-1个圆环到另一根柱子
  If n=0 Then '无操作数时的处理
  Else
  If n=1 Then
  movet one,three
  Else
  hano n-1,one,three,two
  movet one,three
  hano n-1,two,one,three
  End If
  End If
  End Sub
  Private Sub CmdExit_Click() '退出按钮
  Unload Me
  End Sub
  Private Sub CmdList_Click()'列表按钮
  TxtList.Text=""
  Dim m As Integer
  m=Val(TxtInput.Text) '将从文本框输入数据放入变量中
  hano m,"A","B","C"
  End Sub
  这样,在VB中解决汉诺塔问题的程序就完成了,是不是很简单?以上程序在VB 6.0下调试通过。