Как реализовать алгоритм построения линии с обходом препятствий?
1. Алгоритм плоской укладки графов: здесь
2. Иерархический подход для автоматического размещения ациклических графов: здесь
Должно это помочь: https://flowchart.js.org/
делали что-то похожее - сетка 1000*1000, 
можно выбрать область любого размера, например 20*49.
следующий выбор обрабатывается с учетом,  чтобы не разрешать пересекаться с уже выбранными областями.
плюс выбор РАЗМЕРОВ, т.е. задаю размер - например, 1*4 - скрипт сам подбирает первое сверху место по вместимости среди уже выбранных областей.
там все ячейки хранились в БД, скрипт вытаскивал свободные и дальше безумные расчеты)))
если интересно, то поищу, просто так лазить в закромах нет никакого желания)))