irborrero
8/3/2019 - 1:56 PM

DFS - grid


//Important to delegate bound checks

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {

    static class Counter{
        int value = 0;
    }
    // Complete the maxRegion function below.
    static int maxRegion(int[][] grid) {
        int maxRegion = 0;
        Counter actualRegion = new Counter();

        for(int i=0; i<grid.length; i++){
            for(int j=0; j<grid[i].length; j++){
                if(grid[i][j]==1){
                    calculateRegion(i,j,grid,actualRegion);
                    maxRegion = Math.max(maxRegion, actualRegion.value);
                    actualRegion.value=0;
                }
            }
        }

        return maxRegion;
    }

    static void calculateRegion(int i, int j, int[][] grid, Counter c){

        if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) return;
        if(grid[i][j]==0) return;

        c.value++;
        grid[i][j] = 0;


        calculateRegion(i-1, j, grid, c);
        calculateRegion(i+1, j, grid, c);
        calculateRegion(i, j+1, grid, c);   
        calculateRegion(i-1, j+1, grid, c);
        calculateRegion(i+1, j+1, grid, c);
        calculateRegion(i, j-1, grid, c);
        calculateRegion(i-1, j-1, grid, c);
        calculateRegion(i+1, j-1, grid, c);    

        return;
    }
    

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int n = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        int m = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        int[][] grid = new int[n][m];

        for (int i = 0; i < n; i++) {
            String[] gridRowItems = scanner.nextLine().split(" ");
            scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

            for (int j = 0; j < m; j++) {
                int gridItem = Integer.parseInt(gridRowItems[j]);
                grid[i][j] = gridItem;
            }
        }

        int res = maxRegion(grid);

        bufferedWriter.write(String.valueOf(res));
        bufferedWriter.newLine();

        bufferedWriter.close();

        scanner.close();
    }
}