import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 递增路径的最大长度
* @param matrix int整型二维数组 描述矩阵的每个数
* @return int整型
*/
int max = 0;
boolean[][] visited;
public int solve (int[][] matrix) {
// write code here
visited = new boolean[matrix.length][matrix[0].length];
for (int i = 0; i < matrix.length; i ++) {
for (int j = 0; j < matrix[0].length; j++) {
dfs(matrix, i, j, 0, Integer.MIN_VALUE);
}
}
return max;
}
private void dfs (int[][] matrix, int x, int y, int dis, int pre) {
if (x < 0 || x >= matrix.length || y < 0 || y >= matrix[0].length) { // 越界即停
if (max < dis) { // 结算,直至走到上一个坐标,路径长度dis是否比max还要大
max = dis;
}
return;
}
if (!visited[x][y] && pre < matrix[x][y]) { // 如果满足比上一个坐标点还要大,就证明该点是合法点,可以继续往下走
visited[x][y] = true;
dfs(matrix, x - 1, y, dis + 1, matrix[x][y]); //上
dfs(matrix, x + 1, y, dis + 1, matrix[x][y]); //下
dfs(matrix, x, y - 1, dis + 1, matrix[x][y]); //左
dfs(matrix, x, y + 1, dis + 1, matrix[x][y]); //右
visited[x][y] = false;
} else {
// 如果不满足上述条件,证明自己走到了不该走(不合法)的地方,这时候马上结算,
// 直至走到上一个坐标,路径长度dis是否比max还要大
if (max < dis) {
max = dis;
}
}
}
}