昨天在leetcode做的一道题,记录下:
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
我的代码
public class dfs {
public static int numIslands(char[][] grid){
int count = 0;
int i,j;
int x=grid[0].length;
int y=grid.length;
if(grid.length<=0||grid[0].length<=0){
return count;
}
for(i=0;i<y;i++){ //与BFS类似,遍历所有坐标,对陆地坐标调用DFS,将相连陆地变成水
for(j=0;j<x;j++){
if(grid[i][j] == '1'){
DFS(grid,i,j);
count++;
}
}
}
return count;
}
public static void DFS(char[][] grid,int i,int j){
if(i<grid.length&&j<grid[0].length&&i>-1&&j>-1){
if(grid[i][j]=='1'){
grid[i][j]='0';
DFS(grid,i+1,j);
DFS(grid,i,j+1);
DFS(grid,i-1,j);
DFS(grid,i,j-1);
}else return;
}else return;
}
public static void main(String[] args) {
char [][] grid= {{'1','1','1','1','0'},{'1','1','0','1','0'},{'1','1','0','0','0'},{'0','0','0','0','0'}};
System.out.println(numIslands(grid));
}
}