AFON // радиотехник affonya@mail.ru
← Все проекты Delphi

Ханойские башни

Решение головоломки о перекладывании дисков рекурсией.

DP.28 · Алгоритмы

Задача

Вывести последовательность ходов для переноса пирамиды из n дисков.

Алгоритм

Чтобы перенести n дисков: перенести n-1 на промежуточный стержень, переложить нижний, вернуть n-1 наверх.

Исходный код

⇩ Скачать 28-hanoyskie-bashni.dpr

program HanoyskieBashni;
{$mode delphi}{$apptype console}
var steps: Integer;
procedure Perenos(n: Integer; a, b, c: Char);
begin
  if n = 0 then Exit;
  Perenos(n - 1, a, c, b);
  Inc(steps);
  WriteLn('Диск ', n, ': ', a, ' -> ', c);
  Perenos(n - 1, b, a, c);
end;
var n: Integer;
begin
  Write('Число дисков: '); ReadLn(n);
  steps := 0;
  Perenos(n, 'A', 'B', 'C');
  WriteLn('Всего ходов: ', steps);
  ReadLn;
end.

Пояснения

Минимальное число ходов равно 2^n - 1. Процедура названа Perenos, чтобы не пересечься с системной Move.