题解 | 数水坑
数水坑
https://www.nowcoder.com/practice/664ca4289fcf457ba3109fdf4a7a1a05
#include <iostream>
#include<string>
#include<vector>
#include<array>
using namespace std;
array<int,8> dx{-1,-1,0,1,1,1,0,-1};
array<int,8> dy{0,1,1,1,0,-1,-1,-1};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,m;
cin>>n>>m;
vector<string> area;
area.reserve(n);
for(int i=0;i<n;i++){
string line;
cin>>line;
area.emplace_back(line);
}
struct counter{
vector<string>& area;
int &row,&col;
int count=0;
counter(vector<string>& a,int& r,int& c):area(a),row(r),col(c){}
void cover(int x,int y){
area[x][y]='.';
for(int i=0;i<8;i++){
if(x+dx[i]>=0&&x+dx[i]<row&&y+dy[i]>=0&&y+dy[i]<col&&area[x+dx[i]][y+dy[i]]=='W'){
cover(x+dx[i],y+dy[i]);
}
}
}
void search(){
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(area[i][j]=='W'){
count++;
cover(i,j);
}
}
}
}
};
counter c{area,n,m};
c.search();
cout<<c.count;
return 0;
}

