给定矩阵中最大岛的算法

给定2 X 2矩阵,返回可能的不同岛大小


例如,以下矩阵应返回[5, 7]。


  1 0 0 0 1

  1 1 1 1 1

  0 0 0 0 0

  1 1 1 1 1

这是相当简单的问题。我正在使用相同大小的布尔访问矩阵,并以DFS方式遍历该矩阵。我已经在这里实现了。由于某种原因,我将输出为[1]。我尝试调试,但现在我的脑子停了下来。我相信我缺少一些愚蠢的东西。


public class IslandConnectedCell {


    public static void main(String[] args) {


        int[][] input = {

                {1,0,0,0,1},

                {1,1,1,1,1},

                {0,0,0,0,0},

                {1,1,0,1,1}

        };


        dfsIsland(input);


    }



    public static void dfsIsland(int[][] input) {

        int rows = input.length;

        int cols = input[0].length;

        List<Integer> countList = new ArrayList<>();


        boolean visited[][] = new boolean[rows][cols];


        for (int row = 0; row < rows; row++) {

            for (int col = 0; col < cols; cols++) {

                if (input[row][col] == 1 && !visited[row][col]) {

                    int count = mark(row, col, input, visited, rows, cols, 0);

                    countList.add(count);

                }

            }

        }

        System.out.println(countList);


    }


    public static int mark(int row, int col, int[][] input, boolean[][] visited, int rows, int cols, int count) {


        if (row >= rows || row < 0 || col >= cols || col < 0) {

            return 0;

        }


        if (input[row][col] == 0 || visited[row][col]) {

            return 0;

        }


        visited[row][col] = true;

        count+=1;


        for (int i = row - 1; i <= row + 1; i++) {

            for (int j = col - 1; j <= col + 1; j++) {

                if (i != row || j != col) {

                    mark(i, j, input, visited, rows, cols, count);

                }

            }

        }

        return count;

    }


}


POPMUISE
浏览 149回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java