Towers of Hanoi
From: "John Bester" <jbester@ilink.nis.za>
The towers
of hanoi is based on a very simple algorithm. I'll give you the algorithm and
you can implement it.
type
THanoiBin = 0..2;
THanoiLevel = 0..9;
procedure MoveDisc(FromPin, ToPin :
THanoiPin; Level : THanoiLevel);
//
This one you have to implement yourself. It moves 1 disc from a pin to
another.
//
The disc to be moved must be on top (No discs above it)
You can
represent the 3 towers in any way you want. 3 Stacks might probably the
easiest. In this way MoveDisc will become MoveTopDisc and will move the disc on
the top of the FromPin to ToPin and MoveTower will take a pointer to the base
of a stack in stead of a level. Or you can simply use three arrays
[THanoiLevel] of boolean in which case true means that the disc with the particular
size depicted by THanoiLevel is on the tower.
procedure MoveTower(FromPin, ToPin :
THanoiPin; Level : THanoiLevel);
begin
if HanoiLevel <= High(THanoiLevel) then
begin
MoveTower(FromPin, 3
- FromPin - ToPin, Level + 1);
MoveDisc(FromPin, ToPin, Level);
MoveTower(3 - FromPin - ToPin, ToPin, Level + 1);
end;
end;
To move the
entire tower, you call MoveTower with the following as follows:
MoveTower(0, 1, Low(THanoiLevel));