题目:
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
解析:
这道题我们采用深度优先遍历来实现。
先思考DFS算法思路:
了解了深度优先遍历后,我们再整体来看一下需求:
代码:
class Solution {
public int numIslands(char[][] grid) {
int island_num=0;
char[][] mark=new char[grid.length][grid[0].length];
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
mark[i][j]='0';
}
}
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(mark[i][j]=='0' && grid[i][j]=='1'){
DFS(mark,grid,i,j);
island_num++;
}
}
}
return island_num;
}
public void DFS(char[][] mark,char[][] grid,int x,int y){
mark[x][y]='1';
int[] dx={-1,1,0,0};
int[] dy={0,0,-1,1};
for(int i=0;i<4;i++){
int new_x=dx[i]+x;
int new_y=dy[i]+y;
if(new_x<0 || new_y<0 || new_x >= mark.length || new_y >= mark[new_x].length){
continue;
}
if(mark[new_x][new_y]=='0' && grid[new_x][new_y]=='1'){
DFS(mark,grid,new_x,new_y);
}
}
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。