题目链接:https://leetcode.cn/problems/pond-sizes-lcci/
题目如下:
class Solution {
public:
vector<int> pondSizes(vector<vector<int>>& land) {
l=land;
int m=land.size();
if(m==0) return res;
int n=land[0].size();
int count;
vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(visited[i][j]==false&&land[i][j]==0){
count=0;
bfs(visited,i,j,count,m,n);
res.push_back(count);
}
}
}
sort(res.begin(),res.end());
return res;
}
void bfs(vector<vector<bool>>& visited,int x,int y,int& count,int m,int n){
queue<pair<int,int>> que;
que.push({x,y});
visited[x][y]=true;
count++;
while(que.size()){
auto t=que.front();
que.pop();
int dir[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};
for(int i=0;i<8;i++){
int a=t.first+dir[i][0];
int b=t.second+dir[i][1];
if(a>=0&&a<m&&b>=0&&b<n&&visited[a][b]==false&&l[a][b]==0){
que.push({a,b});
visited[a][b]=true;
count++;
}
}
}
}
private:
vector<int> res;
vector<vector<int>> l;
};