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);
            }
        }
    }

}

 

posted @ 2024-10-18 21:16  风乐  阅读(1)  评论(0编辑  收藏  举报