Найти длину наибольшего региона в булевой матрице - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть этот класс, который считает самый большой островок "1" в матрице, но его концепция островов - "Говорят, что две ячейки связаны, если они расположены рядом друг с другом по горизонтали, вертикали или диагонали.«

Мне нужна помощь для удаления шага по диагонали.

class GFG {
    static int ROW, COL, count;

    static boolean isSafe(int[][] M, int row,
                          int col, boolean[][] visited) {
        return ((row >= 0) && (row < ROW) && (col >= 0)
                && (col < COL) && (M[row][col] == 1 &&
                !visited[row][col]));
    }

    static void DFS(int[][] M, int row,
                    int col, boolean[][] visited) {
        int[] rowNbr = {-1, -1, -1, 0, 0, 1, 1, 1};
        int[] colNbr = {-1, 0, 1, -1, 1, -1, 0, 1};

        visited[row][col] = true;

        for (int k = 0; k < 8; k++) {
            if (isSafe(M, row + rowNbr[k], col + colNbr[k], visited)) {
                count++;
                DFS(M, row + rowNbr[k], col + colNbr[k], visited);
            }
        }
    }

    static int largestRegion(int[][] M) {
        boolean[][] visited = new boolean[ROW][COL];
        int result = 0;
        for (int i = 0; i < ROW; i++) {
            for (int j = 0; j < COL; j++) {
                if (M[i][j] == 1 && !visited[i][j]) {
                    DFS(M, i, j, visited);
                    result = Math.max(result, count);
                }
            }
        }
        return result;
    }

    public static void main(String args[]) {
        int M[][] = {{0, 0, 1, 1},
                    {1, 0, 1, 1},
                    {0, 1, 0, 0},
                    {0, 0, 0, 0}};
        ROW = 4;
        COL = 4;
        System.out.println(largestRegion(M));
    }
}

Печатный ответ - 6, но мне нужно, чтобы он вернулся 4, я уже все перепробовал, но могу»не решить.Оригинальный пост алгоритма: https://www.geeksforgeeks.org/find-length-largest-region-boolean-matrix/

1 Ответ

2 голосов
/ 26 сентября 2019

Просто нужно изменить координаты соседнего массива до размера 4.

int rowNbr[] = { -1, 0, 0, 1}; 
int colNbr[] = { 0, -1, 1,  0};

и повторить четыре раза

 for (int k = 0; k < 4; ++k) 

Обновленный код:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...