Не совсем понятно, в чем проблема. Если одна клетка - один остров, то просто посчитать количество ненулевых элементов в массиве, да и все..
Вот если острова, соседствующие через сторону, считать одним островом - тогда да, есть некоторая проблема. Допустим, море представлено двумерным массивом целых. В нем 0 означает воду, а -1 (минус единица) - остров. Тогда алгоритм подсчета можно сделать таким (дубово, но работать будет)..
1. Обнуляем счетчик островов N. 2. Проходим по всему массиву до встречи первой -1. 3. Если ни одной -1 не было найдено - выходим. 4. Увеличиваем N на 1. 5. Меняем значение найденной клетки на N 6. Сбрасываем флаг. 7. Проходим циклом по всему массиву. Если текущий элемент равен -1, а один из его четырех соседей равен N, то меняем его на N и устанавливаем флаг. 8. Если флаг установлен - переходим к п.6 9. Если флаг сброшен - переходим к п.2
После выполнения алгоритма в N будет лежать число островов, а сами острова в массиве будут помечены клетками, содержащими номер острова. Этот алгоритм наверняка можно ускорить.. Нужно?
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
|