image.png
    关键在于如何在程序中判断是否存在水洼,在每一个W格子上都进行一次dfs,将W换成,直到周围都是,算一个水洼.

    1. #include<iostream>
    2. #include<string>
    3. using namespace std;
    4. // 注意这个地方不要只设置成100,稍微设置的大一点
    5. #define MAX_N 105
    6. #define MAX_M 105
    7. char fields[MAX_N][MAX_M];
    8. int N,M;
    9. int dfs(int x, int y) {
    10. fields[x][y] = '.';
    11. for(int dx=-1; dx<=1; dx++) {
    12. for (int dy=-1; dy<=1; dy++) {
    13. int nx = x+dx, ny = y+dy;
    14. if (nx >=0 && nx < N && ny >=0 && ny<M && fields[nx][ny] == 'W') dfs(nx, ny);
    15. }
    16. }
    17. return 0;
    18. }
    19. int main() {
    20. cin >> N >> M;
    21. for(int i=0;i<N;i++)
    22. scanf("%s",fields[i]);
    23. int ans = 0;
    24. for(int i=0; i<N; i++) {
    25. for(int j=0; j<M; j++) {
    26. if (fields[i][j] == 'W') {
    27. dfs(i,j);
    28. ans ++;
    29. }
    30. }
    31. }
    32. cout << ans << endl;
    33. return 0;
    34. }