为了账号安全,请及时绑定邮箱和手机立即绑定

给定矩阵中最大岛的算法

给定矩阵中最大岛的算法

POPMUISE 2021-04-30 14:27:37
给定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;    }}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信