zoukankan      html  css  js  c++  java
  • 200. 岛屿数量

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

    示例 1:

    输入:
    11110
    11010
    11000
    00000

    输出: 1
    示例 2:

    输入:
    11000
    11000
    00100
    00011

    输出: 3

    解:这道题的深度优先搜素或者广度优先搜索,遇到一个为1的字符,就把上下左右四个方向遍历,如果这些方向的也为1,那肯定是相接触的,置为0.再基于此节点的四个方向递归搜索

    class Solution {
    public:
        void dfs(vector<vector<char>>& matrix,int i,int j)
        {
            if(i>=matrix.size()||j>=matrix[0].size())
                return;
            //遍历上下左右
            matrix[i][j]='0';
            if(i-1>=0&&matrix[i-1][j]=='1') 
            dfs(matrix,i-1,j);
            if(i+1<matrix.size()&&matrix[i+1][j]=='1') 
            dfs(matrix,i+1,j);
            if(j-1>=0&&matrix[i][j-1]=='1') 
            dfs(matrix,i,j-1);
            if(j+1<matrix[0].size()&&matrix[i][j+1]=='1') 
            dfs(matrix,i,j+1);
    
        }
        int numIslands(vector<vector<char>>& matrix) {
            if(matrix.size()==0)
                return 0;
            if(matrix[0].size()==0)
                return 0;
            int ri=matrix.size();
            int ci=matrix[0].size();
    
            int max_num=0;
            for(int i=0;i<ri;i++)
            {
                for(int j=0;j<ci;j++)
                {
                    //深度优先搜索的1都被置位0了 除了第一个
                    //当前值为1的再递归,不然全都为0了
                    if(matrix[i][j]=='1')
                    {
                        max_num++;
                        dfs(matrix,i,j);
                    }
                }
            }
            return max_num;
        }
    
    };
  • 相关阅读:
    http参数传递方式
    Api接口管理工具推荐
    IntelliJ IDEA 插件推荐
    spring服务器接收参数格式
    SSM框架的常用注解整理
    Java map 详解
    遍历Map集合四中方法
    bean对应mapper.xml字段
    Java简历与面试
    SQL的case when then else end语句的用法
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/12346052.html
Copyright © 2011-2022 走看看