#438. 最大的蛋糕块

最大的蛋糕块

这一小明天生日,他的朋友们一起来给小明买一个大的蛋糕过生日。游戏做完后到了切蛋糕的时刻了,朋友们知道小明喜欢吃蛋糕,便让小明自己给自己切一块最大的。小明看朋友们这么热情也就不客气了。

这块蛋糕是由 R×CR×C 的网格构成,每个网格上面都放有不同的水果。小明把这些水果分为两类,一类是自己喜欢吃的水果,用'#'来表示;一类是自己不喜欢吃的水果,用'.'来表示。

小明对切出的蛋糕有如下要求:

  • 切出的蛋糕连成一块(可以不为矩形,但必须在网格上连通)
  • 切出的蛋糕只包含自己喜欢吃的水果

请问,小明最大可以吃到多大的蛋糕?

请在合适地方填下代码

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
bool vis[1005][1005];
string maze[1005];
int ans, cnt;
int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
bool in(int x, int y) {
    return x >= 0 && x < n && y >= 0 && y < m;
}
void dfs(int x, int y) {
    cnt++;
    vis[x][y] = true;
    for (int i = 0; i < 4; i++) {
        // 请在这里添加合适的代码
    }
}
int main() {
    freopen("cake.in", "r", stdin);
    freopen("cake.out", "w", stdout);
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> maze[i];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (maze[i][j] == '#' && !vis[i][j]) {
                // 请在这里添加合适的代码
                dfs(i, j);
                // 请在这里添加合适的代码
            }
        }
    }
    cout << ans << endl;
    return 0;
}

输入格式

第一行输入两个被空格隔开的整数 R(1R1000)R(1≤R≤1000)C(1C1000)C(1≤C≤1000)

然后会有一个 R×CR×C 的网格,由'#''.'组成。

输出格式

输出一个整数,表示小明可以吃到的蛋糕最大是多少(即对应到网格中的格子数)。

输出时每行末尾的多余空格,不影响答案正确性

要求使用「文件输入输出」的方式解题,输入文件为 cake.in,输出文件为 cake.out

样例输入

5 6
.#....
..#...
..#..#
...##.
.#....

样例输出

2