标记所有情况的DFS(计数):
dfs(x,y):
if x,y 不符合:return
标记该状态
cnt++;
dfs(邻接状态)
cnt为总的标记次数
最大连通块:实质是多次使用 标记所以情况的DFS(计数)
dfs(x,y):
if((x,y)出界或G[x][y]==0)return;
G[x][y]=0;
cnt++;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
for(i)
for(j)
if(G[i][j]==1)
cnt=0;
dfs(i,j);
更新maxcnt
int area=0;
int maxarea=0;
void dfs(int x,int y){
if(!(x>=0&&y>=0&&x<n&&y<m))return;
if(G[x][y]=='.')return;
G[x][y]='.';
area++;
dfs(x+1,y);
dfs(x,y+1);
dfs(x-1,y);
dfs(x,y-1);
}
void solve(){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(G[i][j]=='#'){
area=0;
dfs(i,j);
maxarea=max(maxarea,area);
}
}
}
cout<<maxarea;
}