0% found this document useful (0 votes)
32 views5 pages

"Move #" "From" " To"

This document defines a TowersOfHanoi class that contains methods for solving the Towers of Hanoi problem recursively by moving disks from one tower to another, tracking the number of moves and time taken. It includes methods for moving disks individually or recursively, printing the moves, and running trials for different numbers of disks to output a table showing the relationship between disks, moves, and time.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views5 pages

"Move #" "From" " To"

This document defines a TowersOfHanoi class that contains methods for solving the Towers of Hanoi problem recursively by moving disks from one tower to another, tracking the number of moves and time taken. It includes methods for moving disks individually or recursively, printing the moves, and running trials for different numbers of disks to output a table showing the relationship between disks, moves, and time.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Imports System

Imports System.Componen
tModel
Imports System.Windows.
Forms

Namespace TowersOfHanoi

Class Hanoi

Private text A
s String

Private bw As B
ackgroundWorker

Public Sub New(


ByVal printMoves As Boo
lean, ByVal printTabl
e As Boolean, ByVal num
berDisks As Integer, By
Ref text As String, ByV
al bw As BackgroundWork
er, ByVal setText As Ac
tion(Of String))
MyBase.New
Me.bw = Me.
bw
Me.text = M
e.text
If printMov
es Then
Dim mov
eNumber As Integer = 0
Dim dt
0 As DateTime = DateTim
e.Now
Me.tex
t = (Me.text + "Move #"
& vbTab&"From"& vbTab&"
To"& vbCrLf& vbCrLf)
Me.Move
Disks(printMoves, numbe
rDisks, 1, 2, 3, moveNu
mber)
Me.tex
t = (Me.text + ""& vbCr
Lf)
Me.tex
t = (Me.text + ("Numbe
r of Moves = " _

+ (moveNumber + ""
& vbCrLf)))
Dim dt
1 As DateTime = DateTim
e.Now
Dim t
s As TimeSpan = (dt
1 - dt0)
Me.tex
t = (Me.text + "Time (m
in:sec.MS) - ")
Me.tex
t = (Me.text _

+ (ts.Minutes.ToSt
ring("D2") + ":"))
Me.tex
t = (Me.text _

+ (ts.Seconds.ToSt
ring("D2") + "."))
Me.tex
t = (Me.text _

+ (ts.Milliseconds
.ToString("D3") + ""& v
bCrLf& vbCrLf))
setText
(Me.text)
End If

If printTab
le Then
Me.tex
t = (Me.text + "# Disks
"& vbTab&"# Moves"& vbT
ab&"Time"& vbCrLf& vbCr
Lf)
numberD
isks = 3
Do Whil
e (numberDisks <= 20)
Di
m moveNumber As Intege
r = 0
Di
m dt0 As DateTime = Dat
eTime.Now
Me.
MoveDisks(false, number
Disks, 1, 2, 3, moveNum
ber)
I
f Me.bw.CancellationPen
ding Then

Exit For
En
d If

Di
m dt1 As DateTime = Dat
eTime.Now
Di
m ts As TimeSpan = (dt
1 - dt0)
Me.
text = (Me.text _

+ (numberDisk
s + (""& vbTab _

+ (moveNumbe
r + ""& vbTab))))
Me.
text = (Me.text _

+ (ts.Minutes.
ToString("D2") + ":"))
Me.
text = (Me.text _

+ (ts.Seconds.
ToString("D2") + "."))
Me.
text = (Me.text _

+ (ts.Millisec
onds.ToString("D3") + "
"& vbCrLf))
num
berDisks = (numberDisk
s + 1)
Loop

setText
(Me.text)
End If

End Sub

Private Sub Mov


eDisks(ByVal printMove
s As Boolean, ByVal num
berDisks As Integer, By
Val fromTower As Intege
r, ByVal spareTower A
s Integer, ByVal toTowe
r As Integer, ByRef mov
eNumber As Integer)
If Me.bw.Ca
ncellationPending Then
Return
End If

If (numberD
isks > 1) Then
Me.Move
Disks(printMoves, (numb
erDisks - 1), fromTower
, toTower, spareTower
, moveNumber)
Me.Move
SingleDisk(printMoves
, fromTower, toTower, m
oveNumber)
Me.Move
Disks(printMoves, (numb
erDisks - 1), spareTowe
r, fromTower, toTower
, moveNumber)
Else
Me.Move
SingleDisk(printMoves
, fromTower, toTower, m
oveNumber)
End If

End Sub

Private Sub Mov


eSingleDisk(ByVal print
Moves As Boolean, ByVa
l fromTower As Integer
, ByVal toTower As Inte
ger, ByRef moveNumber A
s Integer)
moveNumbe
r = (moveNumber + 1)
If printMov
es Then
Me.tex
t = (Me.text _

+ (moveNumber.ToSt
ring + ""& vbTab))
Me.tex
t = (Me.text _

+ (fromTower.ToStr
ing + ""& vbTab))
Me.tex
t = (Me.text _

+ (toTower.ToStrin
g + ""& vbCrLf))
End If

End Sub
End Class
End Namespace

You might also like