minn 答案周长 maxn 答案面积 S 当前冰淇淋块的面积 C 当前冰淇淋的周长
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
char a[N][N];
bool st[N][N];
int n,S=0,C=0;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
void dfs(int x,int y)
{
a[x][y]='.';
st[x][y]=true;
S++;
for (int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if (xx<0||xx>=n||y<0||yy>=n)
{
C++;
continue;
}
if (a[xx][yy]=='.')
{
if (!st[xx][yy])
C++;
continue;
}
dfs(xx,yy);
}
}
int main()
{
cin>>n;
int maxn=-N,minn=N;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
cin>>a[i][j];
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
if (a[i][j]=='#')
{
dfs(i,j);
if (S==maxn)
minn=min(C,minn);
else
{
if (S>maxn)
maxn=S,minn=C;
}
S=0,C=0;
}
}
cout<<maxn<<' '<<minn;
return 0;
}