描述
小 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。
#include<bits/stdc++.h>
using namespace std;
char map1[105][105];
int s=1,maxs=0,way[105][105],n,m;
const int fx[4]={-1,0,1,0};
const int fy[4]={0,1,0,-1};
void dfs(int xx,int yy)
{
int x,y;
for(int i=0;i<4;i++)
{
way[xx][yy]=1;
x=xx;
y=yy;
x=x+fx[i];
y=y+fy[i];
if(x>=1&&x<=n&&y>=1&&y<=m&&way[x][y]!=1&&map1[x][y]==map1[xx][yy])
{
s++;
dfs(x,y);
}
}
way[xx][yy]=0;
}
int main()
{
freopen("swim.in","r",stdin);
memset(way,0,sizeof(way));
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>map1[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
dfs(i,j);
if(maxs<s) maxs=s;
s=1;
}
printf("%d",maxs);
return 0;
}
这是本人拙劣的代码