Эта головоломка была изобретена французским математиком Эдуардом Лукасом в 1883 году. Она продавалась с 8 дисками и с описанием легенды о том, что в храме в Бенаресе, Индия, есть "Башня Брахмы", где жрецы храма перемещают 64 золотых диска по одному диску каждую секунду. Когда они выполнят свою работу, миру придет конец.
Правила игры
Имеется три стержня a, b и c. На стержень а (surse) нанизаны пирамидкой несколько колец разного диаметра. Задача состоит в том, чтобы за наименьшее число ходов перенести пирамиду на стержень b (reseiver), используя стержень c (storage), как вспомогательный.
За один раз разрешается переносить только одно кольцо, причём, нельзя класть большее кольцо на меньшее.
Рис. 1. Головоломка "Ханойские башни" с пятью кольцами.
Решить головоломку Ханойская башня можно несколькими методами.
Рекурсивный метод
Предположим, что нам известен алгоритм перемещения n-1 дисков с одного стержня на второй, тогда функция play() для перемещения n дисков со стержня surse на стержень receiver должна будет:
- переместить n-1 диск со стержня surse на стержень storage
- последний диск n переместить со стержня surse на стержень receiver
- переместить n-1 диск со стержня storage на стержень receiver.
Программирование GUI
Виртуальное игровое поле playArea состоит из списка позиций на всех трёх пирамидах. Следовательно, оно содержит в три раза больше элементов чем одна пирамида. Каждая треть списка playArea отображает состояние одной из трёх пирамид. Каждая треть списка playArea организована в виде стека LIFO (англ. Last In, First Out – «последним пришёл — первым ушёл») с основаниями в начале каждой трети списка playArea. Напомним, что по правилам игры, на вершине пирамиды всегда находится наименьший диск, в основании, соответственно, наибольший на этом стержне.