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——矩阵中的最长递增路径