Как разбить целочисленный массив на "районы"?
У меня есть целочисленный массив 10x10 (назовем его "таблицей"), и у меня есть итеративная задача, которую мне нужно выполнить в C++ с этим массивом. По сути, мне нужно сделать все возможные варианты разделения таблицы на "районы" внутри таблицы, где под "районом" я подразумеваю набор записей таблицы, удовлетворяющих требованиям
1) каждый район состоит из 10 записей таблицы
2) каждая запись в округе примыкает по крайней мере к одной другой записи в округе. То есть для каждой записи a_ij в округе должна быть другая запись в округе выше, ниже, справа или слева от a_ij (диагональное движение не считается смежным).
Что мне нужно, так это пройти через все возможные деления этой таблицы на районы. Таким образом, одно возможное деление-каждая строка-это район, другое возможное деление-каждый столбец-это район и т. д. Для каждого возможного деления у меня есть вычисление, которое мне нужно сделать, но я знаю, как это сделать, я просто не знаю, как реализовать марширование всех возможных вариантов разделения таблицы на районы. Есть ли в библиотеке алгоритмов алгоритм, который мог бы мне помочь? Или это просто кодировать с нуля? Я прошу прощения, если это тривиальный вопрос, я не очень хорошо знаю C++, но мне нужно сделать это для отдельного проекта.
Что я уже пробовал:
Я попытался продумать алгоритм и попытаться найти что-то похожее в библиотеке алгоритмов C++.
John R. Shaw
Похоже, пришло время достать бумагу и карандаш. Нарисуйте 2-мерный массив [сетка 10x10] с соответствующими значениями, чтобы вы могли визуализировать проблему.
Daniel Pfeffer
Посмотрите на статьи о полимино.
Это звучит как проблема плитки (покройте область плитками разных форм/размеров). Метод грубой силы должен начинаться с написания алгоритма для создания всех возможных 10-плиток, а затем писать алгоритм, который пытается упаковать 10 из них в определенной области, но, вероятно, есть лучшие методы для этого.
Предположим, что у вас есть любое количество плиток каждой формы. Не забывайте о поворотах и зеркалах плиточных форм!