题目:
给一个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);
}
}
}