2022.03.08 - NC044.BM61 矩阵最长递增路径

文章目录

  • 1. 题目
  • 2. 思路
    • (1) 回溯
  • 3. 代码

1. 题目

2022.03.08 - NC044.BM61 矩阵最长递增路径_第1张图片
2022.03.08 - NC044.BM61 矩阵最长递增路径_第2张图片

2. 思路

(1) 回溯

  • 利用深度优先搜索遍历所有路径,若要从当前单元格跳到下一个单元格,则将当前单元格的值置为相反数,回溯时再次置为相反数。

3. 代码

public class Test {
    public static void main(String[] args) {
    }
}

class Solution {
    public int res;

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 递增路径的最大长度
     *
     * @param matrix int整型二维数组 描述矩阵的每个数
     * @return int整型
     */
    public int solve(int[][] matrix) {
        res = 0;
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                backtrack(matrix, i, j, 1);
            }
        }
        return res;
    }

    public void backtrack(int[][] mat, int i, int j, int cur) {
        int temp = mat[i][j];
        mat[i][j] = -temp;
        boolean move = false;
        if (i > 0 && mat[i - 1][j] > temp) {
            backtrack(mat, i - 1, j, cur + 1);
            move = true;
        }
        if (i < mat.length - 1 && mat[i + 1][j] > temp) {
            backtrack(mat, i + 1, j, cur + 1);
            move = true;
        }
        if (j > 0 && mat[i][j - 1] > temp) {
            backtrack(mat, i, j - 1, cur + 1);
            move = true;
        }
        if (j < mat[0].length - 1 && mat[i][j + 1] > temp) {
            backtrack(mat, i, j + 1, cur + 1);
            move = true;
        }
        mat[i][j] = temp;
        if (!move) {
            res = Math.max(res, cur);
        }
    }
}

你可能感兴趣的:(算法,#,牛客网,算法)