![]() |
![]() |
@^WARlock^@ |
![]() ![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 96 Пол: Мужской Реальное имя: John Репутация: ![]() ![]() ![]() |
Народ помогите написать программу.
Острова (определить кол-во островов на озере). Прога частично напоминает морской бой. Задается поле, на нем можно расставлять острова (один квадрат –ик один остров). После расставления островов, прога должна сосчитать их кол-во. |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Не совсем понятно, в чем проблема. Если одна клетка - один остров, то просто посчитать количество ненулевых элементов в массиве, да и все..
Вот если острова, соседствующие через сторону, считать одним островом - тогда да, есть некоторая проблема. Допустим, море представлено двумерным массивом целых. В нем 0 означает воду, а -1 (минус единица) - остров. Тогда алгоритм подсчета можно сделать таким (дубово, но работать будет).. 1. Обнуляем счетчик островов N. 2. Проходим по всему массиву до встречи первой -1. 3. Если ни одной -1 не было найдено - выходим. 4. Увеличиваем N на 1. 5. Меняем значение найденной клетки на N 6. Сбрасываем флаг. 7. Проходим циклом по всему массиву. Если текущий элемент равен -1, а один из его четырех соседей равен N, то меняем его на N и устанавливаем флаг. 8. Если флаг установлен - переходим к п.6 9. Если флаг сброшен - переходим к п.2 После выполнения алгоритма в N будет лежать число островов, а сами острова в массиве будут помечены клетками, содержащими номер острова. Этот алгоритм наверняка можно ускорить.. Нужно? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 21:16 |