Показать сообщение отдельно
Старый 10.07.2009, 04:40   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Области в 2д массиве.

В общем, задача:
Я имею 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ов будет?

Есть еще какие идеи?
(Offline)
 
Ответить с цитированием