题解
2024-03-30 10:49:28
发布于:浙江
6阅读
0回复
0点赞
#include<iostream>
#include<queue>
using namespace std;
int ans=0;
bool vis[405][405];
char dis[405][405];
int n,m;
struct Node {
int x,y;
};
int dx[8]= {-1,-1,-1,0,1,1,1,0};
int dy[8]= {-1,0,1,1,1,0,-1,-1};
bool check(int x,int y) {
return x >= 1 && x <= n && y >= 1 && y <= m && vis[x][y] == 0 && dis[x][y] == 'W';
}
void bfs(int x,int y) {
queue <Node > q;
q.push({x,y});
vis[x][y] = true;
dis[x][y] = '.';
while (!q.empty()) {
Node t = q.front();
q.pop();
for (int i = 0; i < 8; i ++) {
int xx = t.x + dx[i];
int yy = t.y + dy[i];
if (check(xx,yy)) {
q.push({xx,yy});
vis[xx][yy] = true;
dis[xx][yy] = dis[t.x][t.y] + 1;
}
}
}
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i ++) {
for(int j = 1; j <= m; j ++) {
cin >> dis[i][j];
}
}
for(int i = 1; i <= n; i ++) {
for(int j = 1; j <= m; j ++) {
if (dis[i][j] == 'W' && vis[i][j] == 0) {
bfs(i,j);
ans ++ ;
}
}
}
cout << ans;
return 0;
}
这里空空如也
有帮助,赞一个