题目:
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
分析:采用深度优先搜索的方法,对于位置(i,j)的数,若为1,则为岛屿,则对该位置进行深度优先遍历,使得其四周为1的置为0,并递归下去,类似于深度搜索。将该位置四周的为1的变为0的意思就是把它们看成与该位置为同一个岛屿,则再遍历的时候就不会计它们的数(如果原来为1,岛屿数count会加1)。
public class Solution { /** * @param grid: a boolean 2D matrix * @return: an integer */ public int numIslands(boolean[][] grid) { // write your code here if(grid==null || grid.length==0) return 0; int count=0; int row=grid.length; int col=grid[0].length; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(grid[i][j]){ count++; dfs(grid,i,j); } } } return count; } public void dfs(boolean[][] grid,int i,int j){ if(i<0||i>=grid.length||j<0||j>=grid[0].length) return; if(grid[i][j]) { grid[i][j] = false; //往左 dfs(grid, i, j - 1); //往右 dfs(grid, i, j + 1); //往上 dfs(grid, i - 1, j); //往下 dfs(grid, i + 1, j); } } }