На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Графика / Ханойская башня Сделать домашней страницей Добавить в избранное Написать писмо

Ханойская башня


Тяжёлое детство: восьмибитные игрушки.

"Ханойская башня" построена на очень простом алгоритме. Здесь я привожу этот алгоритм, который Вы сможете без труда воспроизвести.


type
  THanoiBin = 0..2;
  THanoiLevel = 0..9;


procedure MoveDisc(FromPin, ToPin : THanoiPin; Level : THanoiLevel);
//  Это Вы должны сделать сами. Переместите один диск с одного штырька на другой.
//  Диск окажется наверху (естественно, выше него дисков не будет) 

Вы можете каким угодно образом перемещать диски 3-х пирамид. 3 пирамиды - наиболее простая разновидность алгоритма. Таким образом процедура переноса диска (MoveDisc) аналогична операции переноса диска на верхний уровень (MoveTopDisc): переместить диск наверх с одного штырька (FromPin) на другой штырек (ToPin) и передать указатель на штырек-приемник (MoveTower) вместе с уровнем расположения перемещенного диска. Другое решение заключается в использовании трех массивов [THanoiLevel] логического типа. В этом случае триггер "Истина (True)" означает наличие на пирамиде диска с размером, соответствующим порядковому номеру элемента массива THanoiLevel.


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;

Чтобы переместить пирамиду целиком, вы должны вызвать процедуру MoveTower следующим образом:


MoveTower(0, 1, Low(THanoiLevel)); 


Copyright ©   "DELPHI WORLD"   E-mail:   delphiworld@mail.ru  http://www.delphiworld.narod.ru
Источник получения информации: http://www.delphiworld.narod.ru
Hosted by uCoz