Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2021, 11:09   #1
Прогги12345
Новичок
Джуниор
 
Регистрация: 12.06.2021
Сообщений: 3
Стрелка Java | Нужно написать метод, работающий с бинарной матрицей

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

1.png

который представлен в виде матрицы типа 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'. Это значит, что мы смотрим, если ли на нулевой позиции (слева) стена. Как это сделать в коде? Помогите, пожалуйста.
Прогги12345 вне форума Ответить с цитированием
Старый 12.06.2021, 13:03   #2
Прогги12345
Новичок
Джуниор
 
Регистрация: 12.06.2021
Сообщений: 3
Стрелка Java | Нужно написать метод, работающий с бинарной матрицей

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

Снимок экрана (1270).png

Метод для вычисления количества фигур, состоящих из нулей:

Код:
public static int numberOfShapes() {
        int h = matrix.length;
        int l = matrix[0].length;
        int countOfShapes = 0;
        for (int i = 0; i < h; i++)
            for (int j = 0; j < l; j++)
                if (matrix[i][j] == 0) {
                    DFS(i, j);
                    countOfShapes++;
                }
        return countOfShapes;
    }

    public static void DFS(int row, int col) {
        int H = matrix.length;
        int L = matrix[0].length;
        if (row < 0 || col < 0 || row >= H || col >= L || matrix[row][col] != 0)
            return;
        matrix[row][col] = 1;
        DFS(row + 1, col);
        DFS(row - 1, col);
        DFS(row, col + 1);
        DFS(row, col - 1);
    }
Прогги12345 вне форума Ответить с цитированием
Старый 12.06.2021, 13:36   #3
Прогги12345
Новичок
Джуниор
 
Регистрация: 12.06.2021
Сообщений: 3
Радость Java | Действия над двоичной матрицей

Дана бинарная матрица:

Код:
int[][] matrix = new int[][]{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
{1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}
{1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1}
{1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}
{1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1}
{1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}
{1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1}
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
Снимок экрана (1274).jpg

Нужно определить индексы строки и столбца левого верхнего угла каждой фигуры, выделенной жёлтым цветом (1 ↔ [2,2]; 2 ↔ [8,4]; 3 ↔[2,6]; 4 ↔ [2,10]; 5 ↔ [4,12]), и вычислить количество нулей внутри каждой фигуры, выделенной жёлтым цветом (1 ↔ 17; 2 ↔ 13; 3 ↔ 5; 4 ↔ 15; 5 ↔ 1).

Метод для поиска количества фигур, выделенных жёлтым цветом, может быть понадобится:

Код:
public static int numberOfShapes() {
        int h = matrix.length;
        int l = matrix[0].length;
        int countOfShapes = 0;
        for (int i = 0; i < h; i++)
            for (int j = 0; j < l; j++)
                if (matrix[i][j] == 0) {
                    DFS(i, j);
                    countOfShapes++;
                }
        return countOfShapes;
    }

    public static void DFS(int row, int col) {
        int H = matrix.length;
        int L = matrix[0].length;
        if (row < 0 || col < 0 || row >= H || col >= L || matrix3[row][col] != 0)
            return;
        matrix[row][col] = 1;
        DFS(row + 1, col);
        DFS(row - 1, col);
        DFS(row, col + 1);
        DFS(row, col - 1);
    }
Помогите, пожалуйста.

Последний раз редактировалось Прогги12345; 12.06.2021 в 13:40.
Прогги12345 вне форума Ответить с цитированием
Старый 13.06.2021, 04:12   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Объединил темы, так как вопрос по сути один. Ответ выдает, но, наверное, можно на джаве и покрасивее сделать (не знаю джаву):
Код:
    static int x, y;

    public static int numberOfShapes() {
        int h = matrix.length;
        int l = matrix[0].length;
        int countOfShapes = 0;
        for (int i = 0; i < h; i++)
            for (int j = 0; j < l; j++)
                if (matrix[i][j] == 0) {
                    countOfShapes++;
                    x = j;
                    y = i;
                    System.out.println(countOfShapes + " - " + DFS(h, l, i, j) + " - " + y + " " + x);
                }
        return countOfShapes;
    }

    public static int DFS(int h, int l, int row, int col) {
        if (row < 0 || col < 0 || row >= h || col >= l || matrix[row][col] != 0)
            return 0;
        matrix[row][col] = 1;
        if (col < x || col == x && row < y) {
            x = col;
            y = row;
        }
        return DFS(h, l, row + 1, col) +
               DFS(h, l, row - 1, col) +
               DFS(h, l, row, col + 1) +
               DFS(h, l, row, col - 1) + 1;
    }
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать код в котором нужно заменить метод подсчёта на метод выбора и вставить ключ float[3] (файл вложен) Sasha48 Помощь студентам 0 26.02.2017 12:03
JAVA. Написать один метод на java для существующей реализации squadgazzz Фриланс 1 14.02.2017 14:04
Метод бинарной вставки parkito Общие вопросы C/C++ 0 30.11.2011 09:23
Нужно написать Java скрипт grim111 Фриланс 1 30.10.2011 14:46