题目链接
经典的八连通(连通块问题)
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
const int INF=0x3f3f3f3f;
char a[120][120];
bool vis[120][120];
int dx[]={1,-1,0,0,1,1,-1,-1};
int dy[]={0,0,1,-1,1,-1,1,-1};
int n,m;
void dfs(int x,int y){
vis[x][y]=1;
for(int i=0;i<8;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=0&&nx<n&&ny>=0&&ny<m&&a[nx][ny]=='W'&&!vis[nx][ny]){
dfs(nx,ny);
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!vis[i][j]&&a[i][j]=='W'){
dfs(i,j);
cnt++;
}
}
}
cout<<cnt<<endl;
}