全部评论 1

  • #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 29;  // 最大的矩阵大小
    int n, m, sum;
    char mp[maxn][maxn];  // 存储房间的矩阵
    bool vis[maxn][maxn];  // 访问标记数组
    // 定义四个方向:上下左右
    int to[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
    
    // 深度优先搜索
    void dfs(int x, int y) {
        vis[x][y] = true;  // 标记当前节点已访问
        sum++;
        // 遍历四个方向
        for (int i = 0; i < 4; i++) {
            int tx = x + to[i][0], ty = y + to[i][1];
            // 确保在矩阵内,且是黑色瓷砖,且未访问过
            if (tx >= 0 && tx < n && ty >= 0 && ty < m && !vis[tx][ty] && mp[tx][ty] == 'B') {
                dfs(tx, ty);  // 递归访问
            }
        }
    }
    
    int main() {
        cin >> n >> m;  // 输入矩阵的行数和列数
        // 输入矩阵,找起始点的位置
        int bx, by;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                cin >> mp[i][j];
                if (mp[i][j] == '@') {
                    bx = i;
                    by = j;
                }
            }
        }
        
        // 从起始位置开始进行深度优先搜索
        sum = 0;
        dfs(bx, by);
        
        // 输出结果,能够到达的黑色瓷砖数量
        cout << sum << endl;
        
        return 0;
    }
    

    2025-07-09 来自 加拿大

    0

热门讨论