给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
我的思路:遍历所有元素,如果没被访问过,且为'1',则进行深度优先遍历,把周围所有水平或垂直相连的'1'都访问一遍,总共dfs了几次就是岛屿的数量
代码如下:
public class Solution { boolean[][] visited; public int numIslands(char[][] grid) { int res = 0; visited = new boolean[grid.length][grid[0].length]; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (!visited[i][j] && grid[i][j] == '1'){ dfs(grid, i, j); res++; } } } return res; } public void dfs(char[][] grid,int i,int j){ if (grid[i][j] == '0'){ return; } int row = grid.length; int column = grid[0].length; visited[i][j] = true; if (j-1 >= 0 && !visited[i][j-1]){ dfs(grid, i, j-1); } if (j+1 < column && !visited[i][j+1]){ dfs(grid, i, j+1); } if (i-1 >= 0 && !visited[i-1][j]){ dfs(grid, i-1, j); } if (i+1 < row && !visited[i+1][j]){ dfs(grid, i+1, j); } } }
结果: