Algorytm przedstawiony w treści zadania wygeneruje dokładnie ten sam ciąg ruchów, jaki
uzyskalibyśmy, stosując algorytm rekurencyjny podany wcześniej (dla odpowiednio wybranego pręta startowego i pręta docelowego). Wiedząc o tym, moglibyśmy posiłkować się rozwiązaniem zadania 2. Równość ciągów ruchów generowanych przez oba algorytmy nie jest
jednak oczywista, szczególnie przy pierwszym zetknięciu z problemem wież z Hanoi
i podanymi algorytmami. Dlatego poniżej prezentujemy rozwiązanie, w którym nie korzystamy z tych własności.
Mamy prześledzić działanie algorytmu dla parzystego
n (
n = 4), przy którym nieparzyste ruchy
(pierwszy, trzeci, piąty,…) będą polegały na przenoszeniu krążka nr 1 o jedną pozycję na lewo (ruchy A => C, B => A lub C => B), natomiast pozostałe ruchy nie zmienią pozycji krążka
numer 1. Z obserwacji tych wynika, że uzyskany ciąg ruchów można opisać jako:
A => C, ??, C => B, ??, B => A, ??, A => C, ??, C => B, ??, B => A, ??, …,
gdzie ?? odpowiada jednemu ruchowi, w którym nie zmieniamy pozycji krążka numer 1. Po
przeniesieniu krążka numer 1 ruchem A => C krążek numer 1 znajdzie się na pręcie C, więc
w następnym ruchu nie uczestniczy pręt C. Analogicznie po przeniesieniu krążka numer 1
ruchem C => B krążek numer 1 znajdzie się na pręcie B, więc w następnym ruchu nie uczestniczy pręt B. Podobna obserwacja zachodzi dla przeniesienia krążka 1 ruchem B => A. Pozwala
to nieco uszczegółowić ciąg ruchów:
A => C, A ? B, C => B, A ? C, B => A, B ? C, A => C, A ? B, C => B, A ? C, B => A, B ? C, …,
gdzie
x ?
y oznacza ruch
x =>
y lub
y =>
x, w zależności od tego, który ruch w danym momencie
jest dozwolony (pamiętajmy, że nie możemy kłaść krążka większego na mniejszy).
Stosując schemat oparty na powyższej regule, stwierdzimy, że wszystkie krążki zostaną przeniesione z pręta A na pręt B po następujących piętnastu ruchach:
A => C, A => B, C => B, A => C, B => A, B => C, A => C, A => B, C => B, C => A, B => A, C => B, A => C, A => B, C => B
.