[leetcode]200. Number of Islands岛屿数量

dfs的第一题

被边界和0包围的1才是岛屿,问题就是分理出连续的1

思路是遍历数组数岛屿,dfs四个方向,遇到1后把周围连续的1置零,代表一个岛屿。

/*
    思路是:遍历二维数组,遇到1就把周围连续的1变成0,res+1,然后继续遍历,直到结束
    周围连续1置零用的是dfs,向四个位置搜索,遇到0返回
     */
    public int numIslands(char[][] grid) {
        if (grid.length==0) return 0;
        int r = grid.length;
        int c = grid[0].length;
        int res = 0;
        //遍历数组
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                if (grid[i][j]=='1')
                {
                    res++;
                    //进行置零操作
                    dfs(grid,i,j,r,c);
                }
            }
        }
        return res;
    }
    public void dfs(char[][] grid,int i,int j,int r,int c)
    {
        //出界和遇0返回
        if (i<0||j<0||i>=r||j>=c||grid[i][j]!='1') return;
        //置零
        grid[i][j]='0';
        //把周围连续的置零
        dfs(grid,i-1,j,r,c);
        dfs(grid,i+1,j,r,c);
        dfs(grid,i,j-1,r,c);
        dfs(grid,i,j+1,r,c);
    }

 

转载于:https://www.cnblogs.com/stAr-1/p/8417214.html

你可能感兴趣的:([leetcode]200. Number of Islands岛屿数量)