200. 岛屿数量

作者:LeetCode
链接:https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 思路:因为每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。所以可以用深度优先搜索,每到一个值为1的点,就说明遇到陆地了,此时岛屿数量加一,之后向四个方向做深度优先搜索,把所有值为1的点设置为0(避免重复统计陆地数量)。假如dfs过程中遇到值为0的点,直接返回,不再dfs

class Solution {//思路看笔记
    public int numIslands(char[][] grid) {
        if (grid == null || grid.length == 0) {
      return 0;
    }
        int hang=grid.length;
        int lie=grid[0].length;//这里的是行,列数量
        int sum=0;
        for(int i=0;i<hang;i++)
            for(int j=0;j<lie;j++)
                {
                      if(grid[i][j]=='1') //遇到陆地,岛数量加一
                            sum++;
                    dfs(grid,i,j);//通过深度优先搜索,找到当前陆地所在岛的全部节点,并且设置为0
                      
                }
                return sum;

    }
    public void dfs(char[][] grid,int hang,int lie)//这里的是下标
    {
        if(hang<0||hang>=grid.length||lie<0||lie>=grid[0].length||grid[hang][lie]=='0')
            return;//过界,或者此点是海洋/已经被访问过,返回
        grid[hang][lie]='0';//调用这个函数之前,i,j是1,所以才要设置为0
        dfs(grid,hang-1,lie);
        dfs(grid,hang+1,lie);
        dfs(grid,hang,lie-1);
        dfs(grid,hang,lie+1);

        

    }
}

  

原文地址:https://www.cnblogs.com/lzh1043060917/p/12954868.html