1 条题解
-
0
#include <iostream> #include <cstring> using namespace std; // 定义全局数组,根据题目约束 n,m ≤ 100,开 105 避免越界 const int MAX = 105; char grid[MAX][MAX]; bool visited[MAX][MAX]; int n, m; // 全局存储地图的行数和列数 // DFS 函数,仅传当前坐标,无需引用 int dfs(int x, int y) { // 越界、已访问、不是污染海域则返回 0 if (x < 0 || x >= n || y < 0 || y >= m || visited[x][y] || grid[x][y] != '*') { return 0; } visited[x][y] = true; int area = 1; // 遍历上下左右四个方向 area += dfs(x - 1, y); area += dfs(x + 1, y); area += dfs(x, y - 1); area += dfs(x, y + 1); return area; } int main() { cin >> n >> m; // 初始化访问标记数组 memset(visited, false, sizeof(visited)); // 读取地图到全局数组 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> grid[i][j]; } } int count = 0; // 污染海域的片数 int total_area = 0; // 污染总面积 int max_area = 0; // 最大污染面积 // 遍历整个地图 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (grid[i][j] == '*' && !visited[i][j]) { count++; int area = dfs(i, j); total_area += area; if (area > max_area) { max_area = area; } } } } cout << count << " " << total_area << " " << max_area << endl; return 0; }
- 1
信息
- ID
- 1291
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者