码迷,mamicode.com
首页 > 其他好文 > 详细

水域大小

时间:2020-09-09 19:14:40      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:整数   示例   turn   style   solution   计算   需要   水平   private   

你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。

示例:

输入:
[
[0,2,1,0],
[0,1,0,1],
[1,1,0,1],
[0,1,0,1]
]
输出: [1,2,4]
提示:

0 < len(land) <= 1000
0 < len(land[i]) <= 1000

code:dfs

class Solution {
private:
    void dfs(int i, int j, int &count, vector<vector<int>> &arr) {
        if(i < 0 || i >= arr.size() || j < 0 || j >= arr[0].size() || arr[i][j] != 0) {
            return ;
        }
        if (arr[i][j] == 0) {
            ++count;
            arr[i][j] = 1;
        }
        dfs(i+1, j, count, arr);
        dfs(i-1, j, count, arr);
        dfs(i, j+1, count, arr);
        dfs(i, j-1, count, arr);
        dfs(i+1, j+1, count, arr);
        dfs(i+1, j-1, count, arr);
        dfs(i-1, j+1, count, arr);
        dfs(i-1, j-1, count, arr);
    }
public:
    vector<int> pondSizes(vector<vector<int>>& land) {
        if (land.empty() || land[0].size() == 0) {
            return {};
        }

        vector<vector<int>> arr(land);
        vector<int> res;
        int count = 0;
        for(int i = 0; i < arr.size(); ++i) {
            for(int j = 0; j < arr[0].size(); ++j) {
                if(arr[i][j] == 0) {
                    dfs(i, j, count, arr);
                    res.push_back(count);
                    count = 0;
                }
            }
        }
        sort(res.begin(), res.end());
        return res;
    }
};

 

水域大小

标签:整数   示例   turn   style   solution   计算   需要   水平   private   

原文地址:https://www.cnblogs.com/tianzeng/p/13582006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!