给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例
在矩阵:
[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
中有 3
个岛.
解题思路:
遍历每一个位置,若当前位置为土地(值为1),对其进行深搜,深搜同时将此位置的值置为0. DFS
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 res = 0;
row = grid.length;
col = grid[0].length;
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
if(grid[i][j]){
dfs(grid, i, j);
res++;
}
}
}
return res;
}
int row;
int col;
int[][] p = {{-1,0},{1,0},{0,-1},{0,1}};
//将以grid[x][y]为起点的相邻部分全部变为0,即所在的岛变为海水
private void dfs(boolean[][] grid, int x, int y){
//越界即返回
if(x < 0 || x >= row || y < 0 || y >= col)
return;
//若已经是海水则返回
if(!grid[x][y])
return;
grid[x][y] = false;
//向四个方向深搜
for(int i=0; i<4; i++)
dfs(grid, x + p[i][0], y + p[i][1]);
}
}