Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class LongestSurface {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- String[] input = scanner.nextLine().trim().split(" ");
- int cols = Integer.parseInt(input[0]);
- int rows = Integer.parseInt(input[1]);
- int[][] matrixOne = createMatrix(scanner, cols, rows);
- System.out.println(findMaxAdjacentCount(matrixOne));
- }
- private static int[][] createMatrix(Scanner scanner, int cols, int rows) {
- int[][] matrix = new int[cols][rows];
- for (int i = 0; i < cols; i++) {
- for (int j = 0; j < rows; j++) {
- matrix[i][j] = scanner.nextInt();
- }
- }
- return matrix;
- }
- public static int findMaxAdjacentCount(int[][] grid) {
- boolean[][] visited = createVisitGrid(grid);
- int result = 0;
- for (int row = 0; row < grid.length; row++)
- for (int col = 0; col < grid[row].length; col++)
- if (!visited[row][col])
- result = Math.max(result, dfs(grid, visited, grid[row][col], row, col));
- return result;
- }
- private static int dfs(int[][] grid, boolean[][] visited, int expected, int row, int col) {
- if (row < 0 || row >= grid.length)
- return 0;
- if (col < 0 || col >= grid[row].length)
- return 0;
- if (visited[row][col] || grid[row][col] != expected)
- return 0;
- visited[row][col] = true;
- int depth = 1;
- depth += dfs(grid, visited, expected, row, col - 1);
- depth += dfs(grid, visited, expected, row, col + 1);
- depth += dfs(grid, visited, expected, row - 1, col);
- depth += dfs(grid, visited, expected, row + 1, col);
- return depth;
- }
- private static boolean[][] createVisitGrid(int[][] grid) {
- boolean[][] visit = new boolean[grid.length][];
- for (int row = 0; row < grid.length; row++)
- visit[row] = new boolean[grid[row].length];
- return visit;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement