import java.util.*;
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
public int solve (char[][] grid) {
int row_len = grid.length ;
int col_len = grid[0].length ;
//记录grid[i][j]是否被访问
boolean[][] isV = new boolean[row_len][col_len] ;
int dao_num = 0 ;//岛屿的数量
for(int i = 0 ; i < row_len ; i ++) {
for(int j = 0 ; j < col_len ; j ++) {
if(grid[i][j] == '0') continue ;//如果是海洋不进行搜索
if(!isV[i][j]) {//如果是未访问过的陆地,则认为新发现了一个岛
dao_num ++ ;
dfs(grid , i , j , isV) ;//从这个点dfs,
}
}
}
return dao_num ;
}
//从当前点(未访问过的新陆地)出发,标记自己和与自己相邻的所有陆地
public void dfs(char[][] map , int i , int j , boolean[][] isV ) {
if(i < 0 || i >= map.length || j < 0 || j >= map[0].length || isV[i][j] || map[i][j] == '0')
return ;
isV[i][j] = true ;
dfs(map , i - 1 , j , isV) ;
dfs(map , i + 1 , j , isV) ;
dfs(map , i , j - 1 , isV) ;
dfs(map , i , j + 1 , isV) ;
}
}