Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/43: Рейтинг темы: голосов - 43, средняя оценка - 4.88
310 / 57 / 7
Регистрация: 30.05.2012
Сообщений: 295

Острова в матрице (Единицы - это острова, а нули - море)

09.08.2012, 17:17. Показов 9328. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется матрица (n*m) заполненная 1 и 0. Единицы - это острова, а нули - море. Если единицы находятся рядом по горизонтали или вертикали - то они образуют один остров. Найти количество островов. Интересует компактное короткое решение + комментарий к моему алгоритму

мой алгоритм такой:
Завели переменную N для подсчета островов
1) Если элемент массива А[i, j] равен 1 и вокруг него(4 клетки) нет клеток с единицей, то присваиваем А[i, j] ноль, N++
2) Если элемент массива А[i, j] равен 1 и вокруг него ровно одна клетка с единицей, то присваиваем А[i, j] ноль(получается что А[i, j] является "концом острова" и его можно отсечь, при этом число островов не изменится).
3а) К N приплюсовываем количество островов, которые являются квадратами 2х2(НЕ ЗНАЮ как это сделать) и елементам массива, которые являются вершинами этих квадратов присваиваем 0.
3б) Если элемент массива А[i, j] равен 1 и является вершиной квадратика 2х2, но этот квадратик 2х2 является Частью бо'льшего острова(тоже НЕ ЗНАЮ как это проверить), то вырезаем этот квадратик, не изменяя число островов(всем числам квадратика присваиваем 0)
Делаем до тех пор, пока все числа не станут нулями
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2012, 17:17
Ответы с готовыми решениями:

Есть острова и мосты между ними. Нужно обойти все острова, побывав на каждом мосту по разу
Задача "Острова и мосты" (задача Эйлера). Есть острова и мосты между ними. Нужно обойти все острова, побывав на каждом мосту по разу. ...

Интересная программа про "острова в море"
вот суть задачи http://www.nelidovo.edu.ru/olimpiads/informatica/Allolimpiads/meshdunarod/meshdunarod1992.html задача старая, но прошу...

Надо найти "острова" на квадратной матрице
Собственно ниже условие и я вроде все понял, но как это сделать... Буду очень благодарен за Вашу помощь.

7
 Аватар для SandWraith
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
09.08.2012, 17:48
Цитата Сообщение от СерыйКардинал Посмотреть сообщение
по горизонтали или вертикали
А по диагонали разные?

Добавлено через 10 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        static bool LocateIsland(int[,] matrix, int i, int j)
        {
            if ((i < 0) || (i >= matrix.GetLength(0))) return false;
            if ((j < 0) || (j >= matrix.GetLength(1))) return false;
 
            var island = matrix[i, j] == 1;
 
            matrix[i, j] = 0;
 
            if (island)
            {
                LocateIsland(matrix, i, j + 1);
                LocateIsland(matrix, i, j - 1);
                LocateIsland(matrix, i + 1, j);
                LocateIsland(matrix, i - 1, j);
            }
 
            return island;
        }
 
        public static void Main()
        {
            var matrix = new int[3, 4] {
                { 0, 0, 0, 1},
                { 0, 1, 1, 0},
                { 0, 0, 0, 0}
            };
 
            var islands = 0;
            foreach (var i in Enumerable.Range(0, matrix.GetLength(0)))
                foreach (var j in Enumerable.Range(0, matrix.GetLength(1)))
                    if (LocateIsland(matrix, i, j))
                        islands++;
 
            Console.WriteLine(islands);                
 
            Console.ReadKey();
        }
Добавлено через 2 минуты
P.S. Как видно метод "разрушающий" - под конец останется нулевая матрица, если надо сохранить исходную, то следует просто сделать копию и работать с ней.
1
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
09.08.2012, 17:49
Цитата Сообщение от СерыйКардинал Посмотреть сообщение
3б) Если элемент массива А[i, j] равен 1 и является вершиной квадратика 2х2, но этот квадратик 2х2 является Частью бо'льшего острова(тоже НЕ ЗНАЮ как это проверить), то вырезаем этот квадратик, не изменяя число островов(всем числам квадратика присваиваем 0)
0110
1111
1
310 / 57 / 7
Регистрация: 30.05.2012
Сообщений: 295
09.08.2012, 18:13  [ТС]
Цитата Сообщение от SandWraith Посмотреть сообщение
А по диагонали разные?
да, по диагонали не считается
Цитата Сообщение от Tessen Посмотреть сообщение
0110
1111
дело в том что после пункта 2 таких фигур не останется

а свой пункт 3 кстати можно заменить на вырезание не квадратов 2х2 а уголков 2х1

Добавлено через 6 минут
SandWraith, какая у вас интересная рекурсия получается, попробую понять как работает

Добавлено через 12 минут
SandWraith, решение у вас дико красивое
Скажите, а это что, правда очень простая задача или я такой тупой?
0
 Аватар для SandWraith
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
09.08.2012, 18:18
Цитата Сообщение от СерыйКардинал Посмотреть сообщение
очень простая задача
Задача как задача, можно так же предложить задачу поиска пути:
В двумерном массиве-матрице есть следующие обозначения: 0 - пустое пространство, 1 - стена, 2 - пользователь, 3 - цель. Пользователь может совершать движение вперед/назад/по диагонали на одну клетку за ход. По/через стены пользователь не ходит. Необходимо найти кратчайший путь от пользователя до цели (за минимальное количество шагов).
0
310 / 57 / 7
Регистрация: 30.05.2012
Сообщений: 295
09.08.2012, 18:22  [ТС]
Цитата Сообщение от SandWraith Посмотреть сообщение
Задача как задача
посадили меня в лужу однако
0
09.08.2012, 18:25

Не по теме:


Ничуть не хотел вас оскорбить. Задачу считаю нормальной.

1
310 / 57 / 7
Регистрация: 30.05.2012
Сообщений: 295
09.08.2012, 18:29  [ТС]
SandWraith, не не, как раз хорошо что посадили, большое спасибо, у вас решение 15 строчек, у меня половина занимала под 100
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2012, 18:29
Помогаю со студенческими работами здесь

Платформа Острова
https://sites.google.com/site/00993300a/gdn dfnsnb.jpg? Итак, Яндекс обновляется. Новая платформа &quot;Острова&quot; которую нам обещают...

3D модель острова
Можете сделать 3d модель

Острова и очередь
Задача на очередь. Карту, определяющую прямоугольную область моря, представим матрицей с целыми элементами (0 – море, 1 - суша). Островом...

[Задача] Три острова
Задача для 3-4 классов (судя по всему, олимпиадная). Я сам так и не решил. Помогли решить математики. Решается элементарно. Ответы и...

Карта и острова, очередь
Карту, определяющую прямоугольную область моря, представим матрицей с целыми элементами (0 – море, 1 - суша). Островом будем считать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru