В общем, задача:
Я имею 2мерный массив.
Массив - это карта.
т.е.:
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 0 0 0 0 0
|
Мне нужно сделать так, чтобы этот массив с помощью определенного алгоритма разбился на области, т.е:
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0
0 0 0 0 4 4 4 4 0 0
0 0 0 0 4 4 4 4 0 0
0 0 0 0 3 0 0 0 0 0
|
Т.е. как бы где большое скопление - это одна область, где другое скопление - другая, ну и оставшееся тоже на области.
Условие: надо исключить создание областей типа:
0 0 0 0 0
2 2 2 2 0
2 2 2 2 2
2 2 2 2 0
|
Ну, короче говоря,
разбить на чисто прямоугольные области.
Как именно будет разбиваться - значение не имеет, т.е. в первом случае такие области - сойдет, а если будет по-другому, но тоже прямоугольные, тоже ладно.
Есть идея , чтобы перем число 1 и смотрим рядом стоящие 1 - и если еще с рядом стоящей есть тоже числа 1 - то берем в область. Но как-то муторно это кажется.
Можно - смотрим. если есть 1 - то просмтариваем правее (левее) все 1, затем вниз идем(вверх) по ВСЕм этим 1 - то получается прямоугольник - то это область.
Но ведь это же куча if и forов будет?
Есть еще какие идеи?