Эта головоломка была изобретена французским математиком Эдуардом Лукасом в 1883 году. Она продавалась с 8 дисками и с описанием легенды о том, что в храме в Бенаресе, Индия, есть "Башня Брахмы", где жрецы храма перемещают 64 золотых диска по одному диску каждую секунду. Когда они выполнят свою работу, миру придет конец.

Правила игры

Имеется три стержня a, b и c. На стержень а (surse) нанизаны пирамидкой несколько колец разного диаметра. Задача состоит в том, чтобы за наименьшее число ходов перенести пирамиду на стержень b (reseiver), используя стержень c (storage), как вспомогательный.

За один раз разрешается переносить только одно кольцо, причём, нельзя класть большее кольцо на меньшее.

Рис. 1. Головоломка  "Ханойские башни" с пятью кольцами.

Решить головоломку Ханойская башня можно несколькими методами.

Рекурсивный метод

Предположим, что нам известен алгоритм перемещения n-1 дисков с одного стержня на второй, тогда функция play() для перемещения n дисков со стержня surse на стержень receiver должна будет:

  1. переместить n-1 диск со стержня surse на стержень storage
  2. последний диск n переместить со стержня surse на стержень receiver
  3. переместить n-1 диск со стержня storage на стержень receiver.

Программирование GUI

Виртуальное игровое поле playArea состоит из списка позиций на всех трёх пирамидах. Следовательно, оно содержит в три раза больше элементов чем одна пирамида. Каждая треть списка playArea отображает состояние одной из трёх пирамид. Каждая треть списка playArea организована в виде стека  LIFO (англ. Last In, First Out – «последним пришёл — первым ушёл») с основаниями в начале каждой трети списка playArea. Напомним, что по правилам игры, на вершине пирамиды всегда находится наименьший диск, в основании, соответственно, наибольший на этом стержне.