Ciekawe Hanoi
Transkrypt
Ciekawe Hanoi
Ciekawe Hanoi Wszyscy pewnie znacie problem wież Hanoi (jeśli nie, to zaleca się wcześniej z nim zapoznać: Wieże z Hanoi na Wikipedii). W tym zadaniu trochę go zmodyfikujemy. Standardowo mamy trzy pałeczki o numerach kolejno: 1, 2, 3. Wprowadźmy dodatkowe ograniczenie mobilności krążków. Krążki o numerach nieparzystych można przenosić jedynie zgodnie ze wskazówkami zegara: 1->2->3->1, zaś krążki o parzystych numerach - tylko przeciwnie: 1->3->2->1. Pozostałe reguły przenosin są bez zmian. Napisz program, który dla danej liczby n krążków oraz dla danych liczb s, d oznaczających kolejno pałeczkę początkową i końcową wypisze serię ruchów (pod uwagę bierzemy tylko optymalną ilość przenosin) po której wszystkie krążki z pałeczki s znajdą się na pałeczce d w żądanej kolejności. Input W pierwszym wierszu wejścia znajduje się liczba 1 <= t <= 25 oznaczająca ilość przypadków testowych. Każdy przypadek testowy składa się z trzech liczb: n, s, d ( 1 <= n <= 20; 1 <= s,d <= 3; s jest różne od d ) oznaczających kolejno: liczbę krążków, numer pałeczki startowej i numer pałeczki końcowej. Output Dla każdego przypadku testowego wypisz serię ruchów (dozwolonych według wyżej wymienionych zasad oraz zasad ogólnych problemu), która będzie optymalna i doprowadzi do przeniesienia wszystkich krążków z pałeczki startowej na pałeczkę końcową. Każdy ruch powinien być postaci: numer_krazka: skad->dokad co oznacza: krążek o numerze numer_krazka przenosimy z pałeczki o numerze skad na pałeczkę o numerze dokad. każdy ruch w osobnej linii. po każdym teście odstęp nowej linii. Example Input: 3 113 223 231 Output: 1: 1->2 1: 2->3 1: 2: 1: 1: 2->3 2->1 3->1 1->2 2: 1->3 1: 2->3 1: 2: 1: 1: 2: 1: 3->1 3->2 1->2 2->3 2->1 3->1