1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public class MaxAreaOfIsland { public static void main(String[] args) { int[][] grid = {{0,0,1,0,0,0,0,1,0,0,0,0,0}, {0,0,0,0,0,0,0,1,1,1,0,0,0}, {0,1,1,0,1,0,0,0,0,0,0,0,0}, {0,1,0,0,1,1,0,0,1,0,1,0,0}, {0,1,0,0,1,1,0,0,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,1,0,0}, {0,0,0,0,0,0,0,1,1,1,0,0,0}, {0,0,0,0,0,0,0,1,1,0,0,0,0}}; System.out.println(maxAreaOfIsland(grid)); }
// 每次调用的时候假设num为1,进入后判断不是岛屿,则直接返回0,就可以避免错误的情况。 // 每次找到岛屿,把找到的岛屿改成0,这是传说中的沉岛思想,就是遇到岛屿就把沉默。 public static int maxAreaOfIsland(int[][] grid){ int res = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { if (grid[i][j] == 1) { res = Math.max(res,dfs(i, j, grid));//math.max选取岛屿中的最大值,不控制时,获得的岛屿值为最后岛屿值 } } } return res; } //深度算法,递归实现 private static int dfs(int i, int j, int[][] grid) { if (i < 0 || j < 0 || i >= grid.length || j >= grid[i].length || grid[i][j] == 0) { return 0; } grid[i][j] = 0;//沉岛思想 int num = 1;//没进入if判断,则是岛屿 num += dfs(i + 1, j, grid); num += dfs(i, j + 1, grid); num += dfs(i - 1, j, grid); num += dfs(i, j - 1, grid); return num; } }
|