dfs的第一题
被边界和0包围的1才是岛屿,问题就是分理出连续的1
思路是遍历数组数岛屿,dfs四个方向,遇到1后把周围连续的1置零,代表一个岛屿。
/* 思路是:遍历二维数组,遇到1就把周围连续的1变成0,res+1,然后继续遍历,直到结束 周围连续1置零用的是dfs,向四个位置搜索,遇到0返回 */ public int numIslands(char[][] grid) { if (grid.length==0) return 0; int r = grid.length; int c = grid[0].length; int res = 0; //遍历数组 for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { if (grid[i][j]=='1') { res++; //进行置零操作 dfs(grid,i,j,r,c); } } } return res; } public void dfs(char[][] grid,int i,int j,int r,int c) { //出界和遇0返回 if (i<0||j<0||i>=r||j>=c||grid[i][j]!='1') return; //置零 grid[i][j]='0'; //把周围连续的置零 dfs(grid,i-1,j,r,c); dfs(grid,i+1,j,r,c); dfs(grid,i,j-1,r,c); dfs(grid,i,j+1,r,c); }