Java | Бинарная матрица

Дан план замка,

введите сюда описание изображения

который представлен в виде матрицы типа String:

1111 1110 1101 0110 1100 0101 0110 
1110 1001 0110 1011 1010 1111 1010 
1000 0101 0011 1110 1011 1110 1010 
1011 1101 0101 0001 0101 0011 1011

Каждый элемент матрицы - это двоичное число в 4-битном представлении. Оно представляет собой стороны каждой ячейки, рассматриваемые в следующем порядке: слева - вверх - справа - вниз. Чёрным жирным цветом выделены стены ("1", если есть стена, а "0", если нет). Нужно вычислить количество комнат замка (их 5), определить координаты левого верхнего угла каждой комнаты (1 ↔ [1,1] ; 2 ↔ [4,2]; 3 ↔[1,3]; 4 ↔ [1,5]; 5 ↔ [2,6]) и количество квадратиков, которые принадлежат каждой комнате (например, для первой комнаты с координатами левого верхнего угла [1, 1] 9 квадратиков). Для получения стены можно использовать matrix[i][j].charAt(0) = '1'. Это значит, что мы смотрим, если ли на нулевой позиции (слева) стена. Как это сделать в коде? Помогите, пожалуйста.


Ответы (1 шт):

Автор решения: besunmyi

-создайте пустой список, в котором будете хранить пройденные квадратики

-создайте пустой список, в котором будете хранить левый верхний угол

-создайте пустой список, в котором будете хранить кол-во квадратиков в комнате

-создайте функцию типа int, которая принимает на вход координаты текущего квадратика и значение ее стен. создайте переменную int со значением 1, которая будет возвращать кол-во пройденных функцией квадратиков. в цикле пройдитесь по значением стен квадратика, если стены нет, то вызывается функция с координатами квадратика, в который она ведет, возвращаемое значение функции добавляется к созданной переменной. функция возвращает ее

-в цикле начинаете прохождение по матрице: если ячейка не пройдена, то она добавляется в список с левыми верхними углами. вызываете созданную ранее функцию, ее значение добавляете в список с кол-вом квадратиков в комнате

также можете почитать про задачи на графы

→ Ссылка