#include<bits/stdc++.h> using namespace std; int n, m; // 地图的行数和列数 char a[100][100]; // 地图数据,使用char类型来存储'*'和'~' int x, k; // x用于计数污染区域数量,k用于计数当前污染区域的面积 int fx[4] = {0, 1, 0, -1}, fy[4] = {1, 0, -1, 0}; // DFS的方向偏移量 // 深度优先搜索函数,用于标记和计算连通的污染区域面积 void dfs(int x, int y) { a[x][y] = '~'; // 标记当前位置为已访问 k++; // 增加当前污染区域的面积计数 for (int i = 0; i < 4; i++) { // 遍历四个方向 int tx = x + fx[i]; int ty = y + fy[i]; // 检查新位置是否在地图范围内且为污染区域且未被访问过 if (tx >= 1 && tx <= n && ty >= 1 && ty <= m && a[tx][ty] == '*') { dfs(tx, ty); // 递归调用DFS } } } int main() { cin >> n >> m; // 输入地图尺寸 for (int i = 1; i <= n; i++) { // 输入地图数据 for (int j = 1; j <= m; j++) { cin >> a[i][j]; } } int maxArea = 0, totalArea = 0; // 最大污染区域面积和总污染面积 for (int i = 1; i <= n; i++) { // 遍历地图查找污染区域 for (int j = 1; j <= m; j++) { if (a[i][j] == '*') { x++; // 增加污染区域计数 k = 0; // 重置当前污染区域面积计数 dfs(i, j); // 对当前污染区域执行DFS if (k > maxArea) maxArea = k; // 更新最大污染区域面积 totalArea += k; // 累计总污染面积 } } } cout << x << " " << totalArea << " " << maxArea << endl; // 输出结果 return 0; } /************************************************************** Problem: 2112 User: zengdongxin Language: C++ Result: Time Limit Exceed ****************************************************************/