Среда, 18.06.2025, 14:52
Приветствую Вас Гость | RSS
Меню сайта
fff
  • Индексация
  • Девочки
    Форма входа
    Категории раздела
    Теория алгоритмов [3]
    Теория алгоритмов
    Code Snippets [1]
    Code Snippets
    Все о PHP [20]
    Все о PHP
    Visual C++ [13]
    Visual C++
    WIN32 API [7]
    WIN32 API
    Delphi [72]
    Delphi
    ASP [2]
    ASP
    Java [67]
    Java
    VBScript [6]
    VBScript
    CGI [2]
    CGI
    VRML [2]
    VRML
    PERL [9]
    PERL
    HTML [4]
    HTML
    XML [10]
    XML
    Архив записей

    Статьи по Оптимизации

    ПРОГРАММИРОВАНИЕ! СОЗДАНИЕ САЙТОВ И ИХ ОПТИМИЗАЦИЯ

    Главная » Статьи » Программирование » Delphi

    Ханойская башня
    Ханойская башня
    "Ханойская башня" построена на очень простом алгоритме. Здесь я привожу этот алгоритм, который Вы сможете без труда воспроизвести.
    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));

    Категория: Delphi | Добавил: Merlin (07.12.2009)
    Просмотров: 669 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *: