Flood fill算法:遍历每个位置,当该位置为岛屿时,将该位置相邻的岛屿全部标记。标记的方式又DFS和BFS。

import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    int[] dx = new int[]{0,-1,0,1};
    int[] dy = new int[]{1,0,-1,0};
    public int solve (char[][] grid) {
        // write code here
        int res = 0;
        if(grid.length == 0 || grid[0].length == 0) {
            return res;
        }
        int n = grid.length, m = grid[0].length;
        for(int i = 0;i < n;i++) {
            for(int j = 0;j < m;j++) {
                if(grid[i][j] == '1') {
                    res++;
                    dfs(grid,i,j);
                }
            }
        }
        return res;
    }
    
    public void dfs(char[][] grid,int a,int b) {
        grid[a][b] = '0';
        for(int i = 0;i < 4;i++) {
            int x = a + dx[i];
            int y = b + dy[i];
            if(x >= 0 && x < grid.length && y >= 0 && y < grid[0].length) {
                if(grid[x][y] == '1') {
                    dfs(grid,x,y);
                }
            }
        }
    }
}