Wskazówka:
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
.
Powrót do pytań