zoukankan      html  css  js  c++  java
  • 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);
    
            
    
        }
    }
    

      

  • 相关阅读:
    IntelliJ IDEA设置JVM运行参数
    IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
    188.索引与视图
    187.数据库操作
    186.元素
    185.流程设计
    184.数据操纵语言DML
    改变linux shell前景色和背景色
    Centos文本方式安装情况下lvm分区的创建
    深入理解计算机系统第二版习题解答CSAPP 2.20
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12954868.html
Copyright © 2011-2022 走看看