给定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; }}
添加回答
举报
0/150
提交
取消