2023-06-18 LeetCode每日一题(统计封闭岛屿的数目)

2023-06-18每日一题

一、题目编号

1254. 统计封闭岛屿的数目

二、题目链接

点击跳转到题目位置

三、题目描述

二维矩阵 grid 由 0 (土地)和 1 (水)组成。岛是由最大的4个方向连通的 0 组成的群,封闭岛是一个 完全 由1包围(左、上、右、下)的岛。

请返回 封闭岛屿 的数目。

提示:
1 <= grid.length, grid[0].length <= 100
0 <= grid[i][j] <=1

四、解题代码

class Solution {
    int dir[4][2]={
        {-1, 0},
        {1, 0},
        {0, -1},
        {0, 1},
    };
public:
    int closedIsland(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        queue<int> q;
        int hash[m][n];
        int ret = 0;
        memset(hash, 0, sizeof(hash));
        for(int i = 0 ; i < m ; ++i){
            for(int j = 0; j < n; ++j){
                int flag = 0;
                if(hash[i][j] == 0 && grid[i][j] == 0){
                    flag = 2;
                    hash[i][j] = 1;
                    q.push(i * 101 + j);
                }
                while(!q.empty()){
                    int u = q.front();
                    int x = u / 101;
                    int y = u % 101;
                    q.pop();
                    for(int k = 0; k < 4; ++k){
                        int tx = x + dir[k][0];
                        int ty = y + dir[k][1];
                        if(tx < 0 || tx >= m || ty < 0 || ty >= n){
                            flag = 1;
                            continue;
                        }
                        if(hash[tx][ty] == 0 && grid[tx][ty] == 0){
                            hash[tx][ty] = 1;
                            q.push(tx * 101 + ty);
                        }
                    }
                }
                if(flag == 2){
                    ret++;
                }
            }
        }
    return ret;
    }
};

五、解题思路

(1) 主要采用的的广度优先搜索的策略。在解决二维平面图里面的问题的时候,我们通常会采用四方向遍历,用二维数组来操控往四个方向进行拓展。

(2) 因为广度优先搜索采用的是哈希加队列,首先所要做的就是将所有连在一起的0全部标记,如果0到达的地图边缘,说明就不是岛屿了,那么广搜结束之后就不需要判定岛屿数目+1,否则的话岛屿数目+1。

(3) 广度优先搜索结束后最终返回结果即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)