1 条题解

  • 0
    @ 2024-10-24 12:40:49
    #include <bits/stdc++.h>
    using namespace std;
    
    // 定义广场的最大尺寸
    const int MAX_W = 50;
    const int MAX_H = 50;
    
    // 瓷砖状态的二维数组
    int tileState[MAX_W + 2][MAX_H + 2];
    // 记录是否已访问的二维数组
    bool visited[MAX_W + 2][MAX_H + 2];
    
    // 深度优先搜索函数
    void dfs(int x, int y) {
        // 标记当前位置已访问
        visited[x][y] = true;
        // 增加经过的黑色瓷砖数量
        if (tileState[x][y] == 1) {
            tileState[x][y] = 2;
        }
        // 向上搜索
        if (x > 1 && tileState[x - 1][y] == 1 &&!visited[x - 1][y]) {
            dfs(x - 1, y);
        }
        // 向左搜索
        if (y > 1 && tileState[x][y - 1] == 1 &&!visited[x][y - 1]) {
            dfs(x, y - 1);
        }
        // 向下搜索
        if (x < MAX_W + 1 && tileState[x + 1][y] == 1 &&!visited[x + 1][y]) {
            dfs(x + 1, y);
        }
        // 向右搜索
        if (y < MAX_H + 1 && tileState[x][y + 1] == 1 &&!visited[x][y + 1]) {
            dfs(x, y + 1);
        }
    }
    
    int main() {
        freopen("tile.in", "r", stdin);
        freopen("tile.out", "w", stdout);
    
        int h, w;
        int startX, startY;
        cin >> h >> w;
    
        // 读取输入并初始化瓷砖状态和初始位置
        for (int i = 1; i <= w; i++) {
            for (int j = 1; j <= h; j++) {
                char s;
                cin >> s;
                if (s == '.') {
                    tileState[i][j] = 1;
                } else if (s == '@') {
                    tileState[i][j] = 1;
                    startX = i;
                    startY = j;
                } else {
                    tileState[i][j] = 0;
                }
                visited[i][j] = false;
            }
        }
    
        // 进行深度优先搜索
        dfs(startX, startY);
    
        // 统计经过的黑色瓷砖数量
        int sum = 0;
        for (int i = 1; i <= w; i++) {
            for (int j = 1; j <= h; j++) {
                if (tileState[i][j] == 2) {
                    sum++;
                }
            }
        }
    
        cout << sum;
    
        return 0;
    }
    
    
    • 1

    信息

    ID
    34
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    60
    已通过
    1
    上传者