- 红与黑
要答案
- @ 2025-9-2 19:17:36
要答案
3 条评论
-
韩修至 LV 6 @ 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
- 上传者