ник: AleksKN
Расчет численности избирателей на избирательных участках.
Имеется таблица со следующими полями:
Дом, Численность, СоседнийДом_1, СоседнийДом_2 и т.д. до СоседнийДом_8
Таблица содержит 100 тыс. записей (100 тысяч домов) с численностью от 1 (частный дом) до 1000 (многоквартирный дом) человек. Каждый дом имеет соседний (к примеру, берется дом в прямой видимости), соседних домов может быть от одного до восьми. Все соседние дома перечисляются в поле Дом, имеют количество жильцов и перечисление своих соседей.
Задача стоит следующая: Для формирования избирательных участков необходимо отобрать группу домов с общей численностью в 2500 человек. Количество в группе должно быть максимально приближенно к 2500 человек, но не менее 1000 и не более 2800. Группа домов не должна разрываться (избирательный участок не должен иметь разрывов).
Методика расчета следующая: Берётся дом №1 с количеством, к примеру, 500 человек, добавляется в группу, берётся следующий дом и из поля СоседнийДом_1, также добавляется в группу, затем из поля СоседнийДом_2 и т.д. Далее берутся в группу дома по необходимости, уже соседи соседей. В случае перебора или недобора по количеству, происходит возврат назад и исключение какого либо из соседних домов, но при условии, что исключённый дом может быть включён в другою группу (избирательный участок) т.е. он не останется изолированным внутри группы. Дома, которые попали в группу из категории СоседнийДом, в расчётах поля Дом в дальнейшем не учувствуют.
Как можно программно выполнить эту задачу?