AcWing 1097. 池塘计数
原题链接
简单
作者:
成为一个优秀的人
,
2021-04-11 22:58:09
,
所有人可见
,
阅读 251
1.宽搜走起
#include<iostream>
#include<queue>
using namespace std;
char f[1005][1005];
int n,m,sum;
typedef pair<int,int>PII;
int dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1};
#define x first
#define y second
void bfs(int cx,int cy)
{
queue<PII>q;
q.push({cx,cy});
f[cx][cy]='.';
while(q.size())
{
PII u=q.front();
q.pop();
for(int i=0;i<8;i++)
{
int l=dx[i]+u.x;
int r=dy[i]+u.y;
if(l<0||r<0||l>=n||r>=m||f[l][r]!='W')
continue;
f[l][r]='.';
q.push({l,r});
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>f[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(f[i][j]=='W')
{
bfs(i,j);sum++;
}
}
cout<<sum<<endl;
return 0;
}