import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int m = scanner.nextInt(); int[][] staris = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { staris[i][j] = scanner.nextInt(); } } int maxH = Integer.MIN_VALUE; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int step = dfs(i, j, staris, 0); if (step > maxH) { maxH = step; } } } System.out.println(maxH); // while (!queue.isEmpty()) { // int l = queue.remove(); // int r = l / m; // int c = l % m; // if (staris[r][c] > maxH) { // maxH = staris[r][c]; // } // for (int k = 0; k < 4; k++) { // int nr = r + next[k][0]; // int nc = c + next[k][1]; // if (nc >= 0 && nr >= 0 && nc < m && nr < n && staris[nr][nc] == staris[r][c] + 1) { // queue.add(nr * m + nc); // } // } // } // if(maxH==1){ // maxH--; // } // System.out.println(maxH); } } private static int[][] next = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; public static int dfs(int i, int j, int[][] staris, int step) { int[] ints = new int[]{step,step,step,step}; for (int k = 0; k < 4; k++) { int r = i + next[k][0]; int c = j + next[k][1]; if (c >= 0 && r >= 0 && c < staris[0].length && r < staris.length && staris[r][c] > staris[i][j]) { ints[k] = dfs(r, c, staris, step + 1); } } Arrays.sort(ints); return ints[3]; } } |
Double click to view unformatted code.