Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dwukolorowa Wieza Hanoi

Ostatnio zmodyfikowano 2014-11-13 08:40
Autor Wiadomość
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
P-120310
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.
P-120497
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.
P-120504
« 1 »
  Strona 1 z 1