要答案

3 条评论

  • @ 2025-11-29 8:59:01

    #include #include using namespace std;

    int W, H; vector<vector > grid; vector<vector > visited; int count;

    // 四个可能的移动方向:上、右、下、左 int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1};

    // 深度优先搜索 void dfs(int x, int y) { // 标记当前位置为已访问 visited[x][y] = true; count++;

    // 尝试四个方向的移动
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        
        // 检查新位置是否有效且未访问且是黑色瓷砖
        if (nx >= 0 && nx < H && ny >= 0 && ny < W && 
            !visited[nx][ny] && grid[nx][ny] == '.') {
            dfs(nx, ny);
        }
    }
    

    }

    int main() { while (cin >> W >> H) { // 输入0 0表示结束 if (W == 0 && H == 0) break;

        grid.assign(H, vector<char>(W));
        visited.assign(H, vector<bool>(W, false));
        count = 0;
        int startX, startY;
        
        // 读取网格并找到起始位置
        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                cin >> grid[i][j];
                if (grid[i][j] == '@') {
                    startX = i;
                    startY = j;
                }
            }
        }
        
        // 从起始位置开始DFS
        dfs(startX, startY);
        
        // 输出结果
        cout << count << endl;
    }
    
    return 0;
    

    }

    • @ 2025-9-6 16:38:53

      问下AI呗

      • @ 2025-9-6 16:31:12

        没人给你答案

        • 1

        信息

        ID
        220
        时间
        ms
        内存
        MiB
        难度
        8
        标签
        递交数
        143
        已通过
        19
        上传者