本题链接:
https://www.luogu.com.cn/problem/P1596d
当然蒟蒻用的也是bfs;
直接上代码
#include<iostream>
using namespace std;
#define maxx 103
int n,m,ans=0;
char a[maxx][maxx];
int posi1[]={0,0,1,-1,1,-1,-1,0,1};
int posi2[]={0,1,1,1,0,0,-1,-1,-1};(8个方向)
void dfs(int x,int y)(这里算是半个dfs,因为只有深入没有回溯)
{if(a[x][y]=='W')
{
a[x][y]='.';
for(int i=1;i<=8;i++)
dfs(x+posi1[i],y+posi2[i]);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]=='W')(直接在外边判断)
{
dfs(i,j);
ans++;
}
cout<<ans;
return 0;
}
如果能帮助到你,蒟蒻乐意之至;
注:原创不易,如有雷同,纯属巧合;