Я не могу думать ни о каком конкретном алгоритме, и под этим я подразумеваю, что, возможно, это просто проблема, чтобы увидеть, как вы думаете, а не проблема, которая будет иметь особенно хорошо подходящее решение.
В любом случаемне кажется, что физическое распределение таблиц имеет решающее значение: вы можете объединять только те таблицы, которые расположены близко друг к другу.Как правило, вы не можете переместить сидящих людей за другой стол или перетаскивать столы по всему ресторану.Это требует структур данных, которые моделируют физическое распределение таблиц, то есть сеть со связанными узлами.Это может усложнить все, что вы захотите, включая, например, расстояние между столами, разделение сети на коридоры и т. Д.
Чтобы найти свободный стол, или взять или освободить свободный стол, как типичное числоТаблицы будут небольшими, вы можете просто итерировать последовательно.Будучи скорее академическим упражнением, вы, вероятно, захотите придумать что-то более подходящее для этой проблемы, но для принятия решения по этому вопросу недостаточно требований.