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) ; } }