Мне нужно умное и довольно простое решение моей проблемы - генерация формы провинции. Предположим, что эта карта является матрицей NxM. Каждая ячейка представлена натуральным числом. 0 означает, что плитка не принадлежит ни к одной провинции. цифры 1 означают, что она принадлежит провинции № 1, № 2 означает, что ячейка принадлежит провинции № 2... и т. д.
Рассмотрим эту карту размером 4x4:
0000
0000
0000
0000
Эта карта представляет собой 16 плиток, которые не принадлежат ни одной провинции.
Это карта, содержащая 1 провинцию:
0010
0111
0100
0000
это провинция размером 5 и id = 1. У нее нет соседей.
Рассмотрим 3 провинции:
1133
2100
2200
2000
Таким образом, провинция 1 является соседом 2 и 3. Провинция 3 является только соседом 1, а провинция 2 является только соседом 1. Также есть 7 не связанных тайлов.
Моя проблема: я хочу сгенерировать k провинций на карте NxN. Также есть несколько простых правил:
- есть максимальный размер провинции и минимальный размер провинции (например, минимум = 2, максимум = 10)
- все тайлы провинции должны быть соединены (по вертикали или горизонтали, но не по углам)
Пример неверной провинции (она не подключена):
1100
0000
0011
0000
- не должно быть анклавов (провинция внутри провинции)
- формы должны быть случайными
Я пытался реализовать это с помощью модификации заливки, но у нее есть некоторые недостатки. Я буду рад услышать некоторые идеи или любую помощь. Карта может быть 300x300 с 200 или более провинциями, так что это также должен быть какой-то хитрый алгоритм.