top1编程
← 返回题目
题解

【基础】数池塘(四方向) USACO

1 条题解

  • 0
    @ 2026-7-29 0:06:21
    #include <bits/stdc++.h>
    using namespace std;
    int n, m; char a[105][105];
    int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};
    void dfs(int x, int y) {
        a[x][y] = '.';
        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i], ny = y + dy[i];
            if (nx >= 1 && nx <= n &&
                ny >= 1 && ny <= m && a[nx][ny] == 'W')
                dfs(nx, ny);
        }
    }
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++) cin >> a[i][j];
        int ans = 0;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                if (a[i][j] == 'W') { ans++; dfs(i, j); }
        cout << ans;
    }
    
    • 1