Dwukolorowa Wieza Hanoi
Ostatnio zmodyfikowano 2014-11-13 08:40
jimmy18 Temat założony przez niniejszego użytkownika |
Dwukolorowa Wieza Hanoi » 2014-11-10 16:36:36 Witajcie, mam problem, dostałem do zrobienia projekt z wieżą Hanoi ale dwukolorową. Robię zwykła rekurencyjnie ale nie wiem za chiny jak zrobić dwukolorową, nic nie moge nawet znalezc na ten temat, pomożcie mi to wykonac, o to treśc:
Zadanie polega na rozdzieleniu stosu krążków o różnych wielkościach i dwóch kolorach (białym i czarnym) na oddzielne wieże. Dla każdej wielkości mamy dwa krążki odpowiednio koloru białego i czarnego. Początkowo wszystkie krążki ułożone są od największego do najmniejszego rozmiaru na jednej wieży naprzemiennie kolorami. W wyniku działania programu wszystkie białe krążki powinny znajdować się na jednej z wież, natomiast wszystkie czarne na innej. Program powinien opisać wykonywane ruchy wg następującego schematu – każdy wiersz zawiera informacje o jednym ruchu w postaci dwóch liczb rozdzielonych spacją z numerem wieży początkowej i docelowej (zakładamy że wieże numerowane są 1,2,3)
Pozdrawiam |
|
Rashmistrz |
» 2014-11-12 23:30:18 Nie ma nic prostszego niż powiedzieć "skonstruuj algorytm!"
Martwi mnie to jak mogą być nałożone na siebie te dwie wieże. No chyba że zmienisz zasadę "[...] element wieży musi być mniejszy [...]" na "[...] mniejszy lub równy [...]".
//Ale tak szczerze to zadanie trudne jest jak dla mnie. //Skąd żeś do nas przybył z takim zadaniem?
EDIT: Tenże algorytm będzie na pewno potrzebował otrzymać informacjie na temat ilości miejsc do rozlokowania wież jak i ilość elementów składających się na wieże. |
|
Piastlis |
» 2014-11-13 08:40:05 Mi się ta zabawka wydaje dość prosta do ułożenia. Oczywiście warunek że dwa krążki o tej samej wielkości mogą leżeć na sobie jest konieczny.Inaczej blokujemy się na 2 ruchu: najmniejsze krążki leżą na 1 i 3 a krążka z 2 nie ma już gdzie przełożyć. Algorytm na klasyczne wieże Hanoi wygląda tak: 1 przekładamy n-1 elementów na słupek pomocniczy 2 n z na docelowy 3 n-1 elementów z pomocniczego na docelowy Kłania się rekurencja. Można zauważyć że przełożenie 2 różnokolorowych elementów tej samej wielkości można potraktować można potraktować jak jeden ruch. Na słupku docelowym kolejność pozostanie taka sama.Oznaczę taki ruch *. Pierwszym krokiem będzie zebranie wszystkich elementów na jednym słupku. 1b i 1c na pomocniczy.Teraz mamy odsłonięte elementy 2 i mamy wybór.Możemy ułożyć docelową wieże na 2 sposoby: tak by kolory były pomieszane(c-b-c-b..) lub ze sobą sąsiadowały(c-b-b-c-c..). Wydaje mi się ta druga metoda lepsza gdyż podczas sortowania kolorów będzie mniej ruchów do wykonania. mamy na pomocniczym 1b-1c i układamy 2b-2c.Przekładamy 1* na 2* i mamy sytuację 3c-2b-2c-1c-1b.2*-1* na 3b. 3b-2*-1* na 3c.3*-2*-1* na 4c i tak dalej aż do momentu gdy mamy największy element na 1 słupie a na drugim resztę posortowaną po 2 elementy na drugim.Teraz wystarczy przenosić wieże z 1 na 2 i odwrotnie z krokiem co 2 elementy. I zabawka ułożona....Uff.. Napisanie tego algorytmu trwało pewnie dłużej niż programu:) Przemyślałem algorytm i na tym parowaniu kolorów nic się nie zyskuje.Porządkuje się po 2 i tyle się traci co zyskuje się na zbieraniu.Troszeczkę skomplikowałem sprawę:). Czyli: Zasada ogólna: przekładam tą wieżę gdzie jest biały najmniejszy krążek. 1. Biały najmniejszy na czarny najmniejszy 2.3 z góry czyli 2b-1c-1b na 2c 3.4 z góry 2c-2b-1c-1b na 3b .. itd aż pozostanie odsłonięty n krążek a na drugim słupie będzie reszta krążków przestawiamy wieżę z 2n-2 elementów a potem analogicznie jak 1 2 3 tylko w drugą stronę czyli przenosimy wieżę za każdym razem pozostawiając 1 krążek. Gotowe.
|
|
« 1 » |