面试题 16.19. 水域大小

就是找联通块

dfs就行

class Solution {
public:
    bool vis[1010][1010];
    void dfs(vector<vector<int>>& land, int x, int y, int& cnt)
    {
        cnt++;
        int len1  = land.size();
        int len2 = land[0].size();
        for(int i = -1; i <= 1; i++)
            for(int j = -1; j <= 1; j++)
            {
                int nx = x + i;
                int ny = y + j;
                if(nx < 0 || ny < 0 || nx >= len1 || ny >= len2 || vis[nx][ny] == 1 || land[nx][ny] != 0) continue;
                vis[nx][ny] = 1;
                dfs(land, nx, ny, cnt);
            }
    }


    vector<int> pondSizes(vector<vector<int>>& land) {
        vector<int> ret;
        memset(vis, 0, sizeof(vis));
        int len1 = land.size();
        int len2 = land[0].size();
        for(int i = 0; i < len1; i++)
            for(int j = 0; j < len2; j++)
                if(land[i][j] == 0 && vis[i][j] == 0)
                {
                    int cnt = 0;
                    vis[i][j] = 1;
                    dfs(land, i, j, cnt);
                    ret.push_back(cnt);
                }
        sort(ret.begin(), ret.end());
        return ret;
    }
};

 

posted @ 2021-10-17 22:34  WTSRUVF  阅读(31)  评论(0编辑  收藏  举报