以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
#include <iostream>
#include <vector>
using namespace std;
void dfs(int x, int y, vector<vector<char>>& grid) {
if (x < 0 || x >= grid.size() || y < 0 || y >= grid[0].size() || grid[x][y] == '.') {
return;
}
grid[x][y] = '.';
dfs(x - 1, y, grid);
dfs(x + 1, y, grid);
dfs(x, y - 1, grid);
dfs(x, y + 1, grid);
dfs(x - 1, y - 1, grid);
dfs(x - 1, y + 1, grid);
dfs(x + 1, y - 1, grid);
dfs(x + 1, y + 1, grid);
}
int countBasins(vector<vector<char>>& grid) {
int count = 0;
for (int i = 0; i < grid.size(); ++i) {
for (int j = 0; j < grid[0].size(); ++j) {
if (grid[i][j] == 'W') {
dfs(i, j, grid);
count++;
}
}
}
return count;
}
int main() {
int N, M;
cin >> N >> M;
vector<vector<char>> grid(N, vector<char>(M));
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
cin >> grid[i][j];
}
}
cout << countBasins(grid) << endl;
return 0;
}