Пример 4. Написать программу по решению задачи «Ханойская башня». Имеется пирамида из n колец, лежащих на основании А (на стержне, на столбе) одно на другом в порядке убывания размеров. Кольца должны быть перемещены на основание В в том же порядке, в котором они были на основании А, при использовании промежуточного основания С. Единственными разрешенными перемещениями являются такие, при которых кольцо, взятое с вершины одной из пирамид, помещается на большее кольцо либо на пустое основание. Осуществить выдачу на печать (на консоль, в текстовый файл) последовательности перемещений колец. Алгоритм решения этой задачи достаточно подробно описан в работе [10].
Решение задачи «Ханойская башня»
Для рекурсивного решения задачи следует пройти три этапа.
1-й этап – параметризация. Естественным параметром является n – число колец. В число параметров можно включить также три основания: А (исходное), В (конечное), С (промежуточное).
2-й этап – поиск тривиальных случаев. Здесь тривиальным случаем будет такой, при котором n = 0; тогда просто нечего делать.
3-й этап – редукция общего случая к более простому. Здесь надо отме-
тить, что n колец могут быть перемещены с А на В следующим путем:
переноса (рекурсивно) n – 1 колец с вершины А (исходное основание) на С (промежуточное основание) с учетом правил: основание В (конечная цель) используется как промежуточное;
перемещения на В кольца наибольшего диаметра, оставшегося на А;
переноса (рекурсивно) n – 1 других колец с С на В при соблюдении правил
с А в качестве промежуточного основания.
Алгоритм решения задачи запишем в следующем виде: hanoi(n–1, A, C, B);
переместить (A, B); hanoi(n–1, C, B, A);
где hanoi() – имя рекурсивной функции [10].
Пример промежуточного положения Ханойской башни при n = 4 показан на рис. 18.4.
|
А |
|
В |
|
|
С |
|
|
|
|
|
|
|
|
Рис. 18.4. Промежуточное положение Ханойской башни при n = 4 |
Число элементарных перемещений равно |
2n 1, где n – количество ис- |
ходных дисков [10]. С увеличением n число перемещений быстро нарастает. На рис. 18.5 приведена зависимость элементарных перемещений от числа дисков.