"Ханойская башня" построена на очень простом алгоритме. Здесь я привожу
этот алгоритм, который Вы сможете без труда воспроизвести.
type
THanoiBin = 0..2; THanoiLevel = 0..9;
|
procedure MoveDisc(Pin, ToPin : THanoiPin; Level : THanoiLevel); // Это Вы должны сделать сами. Переместите один диск с одного штырька на другой. // Диск окажется наверху (естественно, выше него дисков не будет)
|
Вы можете каким угодно образом перемещать диски 3-х пирамид. 3
пирамиды - наиболее простая разновидность алгоритма. Таким образом
процедура переноса диска (MoveDisc) аналогична операции переноса диска
на верхний уровень (MoveTopDisc): переместить диск наверх с одного
штырька (Pin) на другой штырек (ToPin) и передать указатель на
штырек-приемник (MoveTower) вместе с уровнем расположения перемещенного
диска.
Другое решение заключается в использовании трех массивов [THanoiLevel]
логического типа. В этом случае триггер "Истина (True)" означает
наличие на пирамиде диска с размером, соответствующим порядковому
номеру элемента массива THanoiLevel.
procedure MoveTower(Pin, ToPin : THanoiPin; Level : THanoiLevel); begin
if HanoiLevel <= High(THanoiLevel) then begin MoveTower(Pin, 3 - Pin - ToPin, Level + 1); MoveDisc(Pin, ToPin, Level); MoveTower(3 - Pin - ToPin, ToPin, Level + 1); end; end;
|
Чтобы переместить пирамиду целиком, вы должны вызвать процедуру MoveTower следующим образом:
MoveTower(0, 1, Low(THanoiLevel));
|