Este é um problema difícil conhecido, determinando quais retângulos podem ser lado a lado com certas peças.
No entanto, se você está criando quebra-cabeças e pode controlar as peças, é o oposto, o problema construtivo e mais fácil ...
Crie uma solução construtivamente. Pegue algumas peças que desejar e preencha o quebra-cabeça da maneira que desejar. Em seguida, coloque quadrados simples suficientes para preenchê-lo e você garantiu que há pelo menos uma solução. Ou melhor, inclua alguns pedaços pequenos no seu conjunto permitido.
Quanto à resolução / disposição das peças, uma abordagem típica de força bruta é preenchê-la da esquerda para a direita e depois de cima para baixo. Encontre a primeira célula aberta (LR numerada, TB) e tente colocar as peças permitidas nas orientações permitidas (8 orientações para uma peça assimétrica, se você permitir o lançamento). Talvez verifique as primeiras peças grandes permitidas e recorra a peças menores, se necessário. Quando você alcança um estado que não gosta (beco sem saída, muitos pedaços pequenos ou o que não gosta), então recua. Se um determinado conjunto de grade / peça não atender aos seus critérios, ou seja, voltar atrás sem terminar, tente um retângulo e um conjunto de peças diferentes.
Uma maneira de tornar um quebra-cabeça "mais fácil" poderia ser trocar peças maiores por peças menores, como monomino e dominó, pois isso deixará mais maneiras de preencher os últimos buracos. Ou, de forma equivalente, crie uma solução que favoreça essas partes menores.
Alguns polominologistas notáveis incluem:
==> http://ee.usc.edu/faculty_staff/faculty_directory/golomb.htm Golomb originalmente cunhou o termo "Polyomino"
==> http://www.eklhad.net/polyomino/ Dahlke resolveu alguns retângulos cheios de peças idênticas (uma forma de mosaico particularmente rara)