Это известная трудная проблема, определяющая, какие прямоугольники можно разбить на определенные фрагменты.
Однако, если вы строите головоломки и умеете управлять частями, это обратная, конструктивная проблема и проще ...
Построить решение конструктивно. Возьмите несколько кусочков, которые вам нравятся, и заполните головоломку так, как вы хотите. Затем добавьте достаточно квадратов, чтобы заполнить его, и вы гарантировали, что есть хотя бы одно решение. Или, скорее, включите несколько маленьких кусочков в свой разрешенный набор кусочков.
Что касается решения / раскладки кусочков, типичный метод грубой силы - заполнить их слева направо, а затем сверху вниз. Найдите первую открытую ячейку (пронумерованную LR, TB) и попробуйте положить разрешенные фигуры в их разрешенную ориентацию (8 ориентаций для асимметричной фигуры, если вы разрешаете переворачивать). Возможно, проверьте сначала большие разрешенные части и прибегните к меньшим, если это необходимо. Когда вы достигнете состояния, которое вам не нравится (тупик, слишком много мелких кусочков или что-то еще), то возвращайтесь назад. Если данный набор сеток / фигур не соответствует вашим критериям, то есть он полностью откатился назад без завершения, попробуйте другой набор прямоугольников и фигур.
Один из способов сделать головоломку «проще» - обменять большие куски на более мелкие, такие как мономино и домино, так как это оставит больше способов заполнить последние дыры. Или, что то же самое, создайте решение, которое благоприятствует этим меньшим частям.
Некоторые известные полиоминологи включают в себя:
==> http://ee.usc.edu/faculty_staff/faculty_directory/golomb.htm Голомб изначально придумал термин «Полемино»
==> http://www.eklhad.net/polyomino/ Дальке решил довольно много прямоугольников, заполненных одинаковыми кусочками (особенно редкая форма мозаики)