bfs的简单应用
使用 st 数组来表示每个点是否已经被遍历过,然后遍历 land 数组,如果当点是水域并且没有被遍历过,那么对当前点进行 bfs ,即可,在bfs中记录水域的面积。
class Solution {
public:
int n , m;
int bfs(int x , int y , vector<vector<bool>>& st , vector<vector<int>>& land) {
st[x][y] = true;
queue<pair<int,int>> q;
q.push({x , y});
int s = 0;
while(q.size())
{
pair<int,int> t = q.front();
q.pop();
s ++;
for(int i = -1; i <= 1; i++)
for(int j = -1; j <= 1; j++)
{
if(!i && !j) continue;
int nx = t.first + i , ny = t.second + j;
if(nx < 0 || nx >= n || ny < 0 || ny >= m || st[nx][ny] || land[nx][ny]) continue;
st[nx][ny] = true;
q.push({nx , ny});
}
}
return s;
}
vector<int> pondSizes(vector<vector<int>>& land) {
vector<vector<bool>> st(1010 , vector<bool>(1010));
n = land.size();
m = land[0].size();
vector<int> res;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
if(!st[i][j] && !land[i][j])
{
int s = bfs(i , j , st , land);
res.push_back(s);
}
}
}
sort(res.begin() , res.end());
return res;
}
};