BFS:
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
struct node
{
int x,y;
};
int n,ans=0,sum=0,imax=-1,iimax=-1,book[1010][1010],m[1010][1010];
char p[1010][1010];
int inext[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};
void bfs(int x,int y)
{
queue <node> q;
q.push({x,y});
while(!q.empty())
{
node head=q.front();
q.pop();
for(int i=0; i<4; i++)
{
int tx=head.x+inext[i][0];
int ty=head.y+inext[i][1];
if(!m[tx][ty]) ans++;
if(tx<1||ty<1||tx>n||ty>n||book[tx][ty]||!m[tx][ty]) continue;
book[tx][ty]=1;
sum++;
q.push({tx,ty});
}
}
}
int main()
{
cin >> n;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
cin >> p[i][j];
if(p[i][j]=='#') m[i][j]=1;
else m[i][j]=0;
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(m[i][j]&&!book[i][j])
{
ans=0,sum=1;
book[i][j]=1;
bfs(i,j);
if(imax<sum)
{
imax=sum;
iimax=ans;
}
else if(imax==sum)
{
iimax=min(ans,iimax);
}
}
}
}
cout << imax << ' ' << iimax ;
}
DFS:
#include <iostream>
using namespace std;
int n,ans=0,sum=0,imax=-1,iimax=-1,book[1010][1010],m[1010][1010];
char p[1010][1010];
int inext[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y)
{
if(x<1||y<1||x>n||y>n||book[x][y]||p[x][y]=='.') return;
sum++;
book[x][y]=1;
for(int i=0; i<4; i++)
{
int tx=x+inext[i][0];
int ty=y+inext[i][1];
if(m[tx][ty]==0) ans++;
else dfs(tx,ty);
}
}
int main()
{
cin >> n;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
cin >> p[i][j];
if(p[i][j]=='#') m[i][j]=1;
else m[i][j]=0;
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(m[i][j]&&!book[i][j])
{
ans=0,sum=0;
dfs(i,j);
if(imax<sum)
{
imax=sum;
iimax=ans;
}
else if(imax==sum)
{
iimax=min(ans,iimax);
}
}
}
}
cout << imax << ' ' << iimax ;
}