c_cpp 找到具有给定约束的矩阵中的最长路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 找到具有给定约束的矩阵中的最长路径相关的知识,希望对你有一定的参考价值。

//https://www.geeksforgeeks.org/find-the-longest-path-in-a-matrix-with-given-constraints/
#include <bits/stdc++.h>
using namespace std;

int func (int i, int j, vector < vector <int> >mat,vector < vector <int> >&dp, int n) {
    if (i<0 || i>=n || j<0 || j<=n)
        return 0;
    if (dp[i][j]!= -1)
        return dp[i][j];
    if (i>0 && mat[i-1][j]== mat[i][j]+1)
        return dp[i][j]= 1+ func(i-1,j,mat,dp, n);
    if (j>0 && mat[i][j-1]== mat[i][j]+1)
        return dp[i][j]= 1+ func(i,j-1,mat,dp, n);
    if (i<n-1 && mat[i+1][j]== mat[i][j]+1)
        return dp[i][j]= 1+ func(i+1,j,mat,dp, n);
    if (j<n-1 && mat[i][j+1]== mat[i][j]+1)
        return dp[i][j]= 1+ func(i,j+1,mat,dp, n);
    dp[i][j]= 1;
}

int main() {
    int n;
    cin>>n;
    vector < vector <int> >mat (n, vector <int> (n));
    for (int i=0;i<n;i++)
        for (int j=0;j<n;j++)
            cin>> mat[i][j];

    int ans= 0;
    vector < vector <int> >dp (n, vector <int> (n,-1));
    for (int i=0;i<n;i++) {
        for (int j=0;j<n;j++) {
            if (dp[i][j]== -1)
                func(i,j,mat, dp, n);
            ans= max(ans, dp[i][j]);
        }
    }
    cout<<ans;
}

以上是关于c_cpp 找到具有给定约束的矩阵中的最长路径的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp [dp] [path] [matrix]具有非负数的2d矩阵/网格中的最小路径和。找到从左上角到右下角的路径,最小化

2021-11-17:最长同值路径。给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。力扣687。

找出矩阵中最长路径的长度,其中包含连续字符及其路径

329. 矩阵中的最长递增路径

329. 矩阵中的最长递增路径

LeetCode——矩阵中的最长递增路径