Flood Fill经典题
数据较小使用dfs,数据较大使用bfs
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int N = 1005;
char g[N][N];
int n, m;
typedef pair<int, int> PII;
int dx[]={1,-1,0,0,1,1,-1,-1};
int dy[]={0,0,1,-1,1,-1,1,-1};
void bfs(int u, int v){
g[u][v] = '.';
queue<PII> q;
q.push({u, v});
while(q.size()){
auto t = q.front();
q.pop();
for(int i = 0; i < 8; i++){
int a = t.first + dx[i];
int b = t.second + dy[i];
if(a>=0&&b>=0&&a<n&&b<m&&g[a][b]=='W') {
g[a][b] = '.';
q.push({a, b});
}
}
}
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++){
scanf("%s", g[i]);
}
int ans = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(g[i][j]=='W') {
ans++;
bfs(i, j);
}
}
}
printf("%d\n", ans);
return 0;
}