题目描述
小 X 想要学游泳。
这天,小 X 来到了游泳池,发现游泳池可以用 N 行 M 列的格子来表示,每个格子的面积都是 1,且格子内水深相同。
由于小 X 刚刚入门,他只能在水深相同的地方游泳。为此,他把整个游泳池看成若干片区域,如果两个格子相邻(上下左右四个方向)且水深相同,他就认为它们属于同一片区域。
小 X 想知道最大的一片区域面积是多少,希望你帮帮他。
输入
第一行包含用一个空格隔开的两个整数 N,M。
接下来 N 行,每行包含 M 个 1 到 9 的数字,表示每个格子的水深。
输出
第一行包含一个整数,表示最大的一片区域面积。
样例输入
3 3 124 224 152
样例输出
3
数据范围限制
对于 30%的数据,1≤N,M≤3。
对于 60%的数据,1≤N,M≤10。
对于 100%的数据,1≤N,M≤100。
数据很小,搜索就OK。
//看我写的另一篇最大黑区域,思路是一样的//
//真不是我懒:) ----->别不看思路就copy代码,对你没好处。。。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, m, a[105][105], sum, ans = 0, s;
char ch;
void dfs(int x, int y)
{
sum++;
a[x][y] = -1;
if (a[x + 1][y] == s)
dfs(x + 1, y);
if (a[x - 1][y] == s)
dfs(x - 1, y);
if (a[x][y + 1] == s)
dfs(x, y + 1);
if (a[x][y - 1] == s)
dfs(x, y - 1);
}
main()
{
freopen("swim.in","r",stdin);
freopen("swim.out","w",stdout);
scanf("%d%d", &n, &m);
getchar();
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
scanf("%d", &a[i][j]);
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (a[i][j] != -1)
{
s = a[i][j];
sum = 0;
dfs(i, j);
ans = max(sum, ans);
}
}
}
printf("%d", ans);
}
就这样,晚安!