algorytm na wypełnianie(?)

0

Witam,
mam pewien projekt i potrzebuję jakiegoś algorytmu..
Chodzi o to by prostokąt 5x12 jednostek (alternatywnie 6x10) wypełnić całkowicie figurami złożonymi z pięciu kwadratów o boku jednostkowym.. Wszystkie te figury mogą się oczywiście obracać itp ale każdy taki element musi się składać z dokładnie pięciu jednostkowych kwadratów i kwadraty te muszą stykać się ze sobą bokami.. Mam nadzieję, że jakoś to jasno wytłumaczyłem.. Program ma znaleźć liczbę kombinacji na ile sposobów można zapełnić zadane pole tego typu figurami..

Będę bardzo wdzięczny za pomoc.

0

Dywan Sierpińskiego (czy jakoś tak), poszukaj w googlach

0

Hmmm... Za bardzo nie wiem co dywan Sierpińskiego może pomóc w tej sytuacji, ewentualnie można go narysować na formie dla wrażeń estetycznych :)

Mam pewien pomysł, poniżej spróbuję zarysować go w kilku(nastu) linijkach (Object-Pascal-style):

type
TUlozenie = array[1..5,1..12] of Boolean; (prostokąt 5/12)
TKombinacja = array of TUlozenie;

var
mr: TUlozenie;
kombi: TKombinacja;
gloli: Integer;

begin
for i:=1 to 5 do for j:=1 to 12 do mr[i,j]:=False;
gloli:=0;
SetLength(kombi,1);
kombi[0]:=mr;

777:

z:=Length(kombi);

{wykonujemy procedurę JakasTam, która dla każdego ułożenia znajdującego się w tablicy kombi tworzy w tejże tablicy wszystkie ułożenia możliwe do uzyskania po następnym ruchu}

JakasTam;

Inc(gloli);
if gloli

0

Faktycznie dywan Sierpińskiego raczej nic tu nie wniesie :d
W każdym razie dzięki wielkie za ten kod programu.. W zasadzie to potrzebny mi był tylko warunek sprawdzania figury w polu (ten z punktem jest bardzo dobry chociaż jeszcze musze to jakoś zaprogramować) bo ogólny pomysł już jakiś miałem..
Ostatecznie mój algorytm będzie się (z dużym przybliżeniem) prezentował jak następuje:

zmienna globalna LICZBA_KOMBINACJI;

int oblicz_ilosc_mozliwosci (tablica[5][12])
{
int tab_lokalna[5][12];
tab_lokalna = tablica;
if (istnieje element pusty w tab_lokalna)
{
for (i=0; i

0

Mam tylko pytanie. Czy te kwadraty mają się stykać na całej długości boków? Bo jeżeli nie to twoje wyliczenia chyba nie są najlepsze.

0

Zgodnie z tym co napisałem wcześniej "ale każdy taki element musi się składać z dokładnie pięciu jednostkowych kwadratów i kwadraty te muszą stykać się ze sobą bokami.." to niemożliwe jest połączenie dwóch kwadratów wierzchołkami.. A moje obliczenia faktycznie są błędne ponieważ mamy jedną prostą 5-el figure (podczas obrotu mamy tylko 2 możliwości) i jeden krzyż (obrót w ogóle nie jest potrzebny bo 4 razy otrzymamy to samo) co daje 67 wszystkich możliwości
(nie znaczy to, że nie mogłem się pomylić.. zważywszy że jestem obecnie już trochę przemęczony ;p )

1 użytkowników online, w tym zalogowanych: 0, gości: 1