Один простой рекурсивный подход, который вы могли бы использовать, который бы дал довольно хорошее случайное распределение, работает следующим образом: в качестве базового случая любая сетка размером 100x100 должна быть заполнена квадратом 100x100. В противном случае, если сетка имеет размер n x n для некоторого n, достаточно маленького, чтобы вместить квадрат, вы можете выбрать его с квадратом такого размера. В противном случае выберите сторону прямоугольника, размер которой не равен 100, выберите случайное место, кратное 100, затем разделите его пополам и рекурсивно разбейте на две половины.
Основным преимуществом этого подхода является то, что вам никогда не нужно отслеживать, куда вы положили старые прямоугольники, чтобы не задеть их. Вы всегда работаете с пустыми прямоугольниками и продолжаете рекурсивно разбивать проблему таким образом, чтобы гарантировать, что регионы никогда не пересекаются.
Это может не всегда давать хорошие результаты, но код очень легко закодировать (я бы предположил, что может быть 15-25 строк кода) и его можно легко настроить, чтобы изменить вывод.
Надеюсь, это поможет!