Вы ищете самый простой алгоритм или тот, который находит оптимально наименьшее количество разделенных прямоугольников?
Начните с самого простого алгоритма для кодирования в качестве основы, который, вероятно, достаточно хорош для многих приложений сам по себе. Это легко написать и понять.
Инициализируйте список прямоугольников, включив в него только один прямоугольник экрана.
Теперь для каждого препятствия итерируйте список прямоугольников. Если прямоугольник пересекается с препятствием, удалите прямоугольник из списка и вставьте новые меньшие прямоугольники, которые избегают препятствия. Это небольшая подзадача, которую легко решить, просто посмотрев, какая часть препятствия пересекает прямоугольник. Вы можете получить 0, 1, 2, 3 или 4 новых под-прямоугольника. (рассмотрим шесть случаев, когда препятствие пересекает один угол, два угла, все углы, без углов и без кромки, без углов и 1 кромки, без углов и 2 кромок.)
Повторите эти действия для всех препятствий, и у вас останется список разделенных прямоугольников, которые покрывают вашу область, не ударяя о препятствия. Это не совсем немного, но это хорошее место для начала и 10 минут для кодирования.