Показать сообщение отдельно
Старый 19.06.2009, 22:38   #3
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: Обработка массива.

Рекурсия.
Заводишь переменную под текущий цвет. Пусть для простоты это x=2.
Перебираешь все клетки. Из клетки, если она уже не покрашена, идешь во всех 4 направлениях, если она 0 - закрашиваешь, если "1" (граница) или любое другое число, отличное от нуля (уже закрашена) - не идешь в нее, рассматриваешь другое направление. Естественно, надо как-то отмечать уже закрашенные клетки (ставить в них "2").
Вот только при таком способе будут закрашивать все участки, т.к. конец массива тоже должен считаться границей. Но можно сделать так: если вдруг при следующем ходе мы дошли до границы массива, то запустить из этой клетки обратное покрашивание (например, в черный цвет, т.е. например x=3). И не забыть отмечать эти клетки, как покрашенные (теперь уже "3"). Таким образом отсечется все это пространство, ограниченное нашими "1" и концами массива, т.к. уже покрашенные клетки пропускаются при переборе.

в итоге получится:
331111113333
333111221133
333311122113
331111122113
331111111113

Все "3" - открытые области. Все "2" - замкнутые пространства.

Последний раз редактировалось MiXaeL, 20.06.2009 в 00:16. Причина: дополнения
(Offline)
 
Ответить с цитированием