Number of Islands

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求

Given a 2d grid map of '1’s (land) and '0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:
Input:

11110
11010
11000
00000

Output: 1

Example 2:
Input:

11000
11000
00100
00011

Output: 3

给定’1’(陆地)和’0’(水)的2d网格图,计算岛屿数量。 岛被水包围,通过水平或垂直连接相邻的土地而形成。 您可以假设网格的所有四个边都被水包围。

2,题目思路

对于这道题,给定一个二维的地图数据,找出其中的“岛屿”的数量。
其中,1表示陆地,0表示水,连接在一起的1就是岛屿,因此题目要求的就是连续在一起的1的区域的个数。

在解决问题上,我们可以通过深度优先遍历以及对地图信息进行更改的方法来找到对应的“岛屿”的数量。

具体操作上,只要我们遇到为‘1’的点,说明这一块一定是一个岛屿,于是res++,并且我们此时就将与其相连的所有为‘1’的点都改为‘0’,说明是已经计算在内的岛屿。
用这种方法,对地图中所有的点遍历一遍即可。

3,代码实现

int x = []() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    return 0;
}();

class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        if(grid.empty())
            return 0;
        
        n = grid.size();
        m = grid[0].size();
    
        
        int res = 0;
        for(int i = 0;i<n;i++)
            for(int j = 0;j<m;j++)
                if(grid[i][j] == '1')
                {
                    DFS_IslandDection(grid, i, j);
                    res++;
                }
        return res;
            
    }
private:
    void DFS_IslandDection(vector<vector<char>>& grid, int i, int j){
        if(i < 0 || j < 0 || i >=n || j >= m || grid[i][j] != '1')
            return;
        
        grid[i][j] = '0';
        DFS_IslandDection(grid, i+1, j);
        DFS_IslandDection(grid, i-1, j);
        DFS_IslandDection(grid, i, j+1);
        DFS_IslandDection(grid, i, j-1);
    }

private:
    int n;
    int m;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值