问题描述:
你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。
示例:
输入:
[
[0,2,1,0],
[0,1,0,1],
[1,1,0,1],
[0,1,0,1]
]
输出: [1,2,4]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/pond-sizes-lcci
class Solution {
public:
int count=0;
void dfs(vector<vector<int>> &land,vector<vector<bool>> &vis,int i,int j){
if(i<0||i>=land.size()||j<0||j>=land[0].size()||vis[i][j]==true||land[i][j]!=0){
return ;
}
vis[i][j]=true;
count++;
dfs(land,vis,i+1,j);
dfs(land,vis,i-1,j);
dfs(land,vis,i,j+1);
dfs(land,vis,i,j-1);
dfs(land,vis,i+1,j+1);
dfs(land,vis,i+1,j-1);
dfs(land,vis,i-1,j+1);
dfs(land,vis,i-1,j-1);
}
vector<int> pondSizes(vector<vector<int>>& land) {
int m=land.size(),n=land[0].size();
vector<vector<bool>> vis(m,vector<bool>(n,false));
vector<int> res;
for(int i=0;i<land.size();i++){
for(int j=0;j<land[0].size();j++){
if(vis[i][j]==false&&!land[i][j]){
dfs(land,vis,i,j);
res.push_back(count);
count=0;
}
}
}
sort(res.begin(),res.end());
return res;
}
};