104. 建造最大岛屿(kamacoder)
https://kamacoder.com/problempage.php?pid=1176
import java.util.*;
public class Main {
static int[] dx={0,1,0,-1};
static int[] dy={1,0,-1,0};
static int n;
static int m;
static int[][] grid;
static boolean[][] vis;
static int area;
public static void main(String[] args) {
// 题意:将一格进行变化,得到的最大面积是多少?
// 思路:根据数据范围50,可以暴力枚举每一个格子变化,得到的面积取max
Scanner in = new Scanner(System.in);
int res=0;
n=in.nextInt();
m=in.nextInt();
grid=new int[n][m];
vis=new boolean[n][m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
grid[i][j]=in.nextInt();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]==0 && vis[i][j]==false)
{
// 尝试将当前枚举的方格变化,进行flood fill
vis=new boolean[n][m];
grid[i][j]=1;
area=0;
dfs(i,j);
grid[i][j]=0;
res=Math.max(res,area);
}else if(vis[i][j]==false && grid[i][j]==1)
{
vis=new boolean[n][m];
area=0;
dfs(i,j);
res=Math.max(res,area);
}
}
}
System.out.println(res);
}
static void dfs(int x,int y)
{
vis[x][y]=true;
area++;
for(int i=0;i<4;i++)
{
int a=dx[i]+x,b=dy[i]+y;
if(a>=0 && b>=0 && a<n && b<m && vis[a][b]==false && grid[a][b]==1)
{
dfs(a,b);
}
}
}
}