Longest Increasing Path in a Matrix

来源:互联网 发布:东莞市住宅成交数据 编辑:程序博客网 时间:2024/05/16 14:42

DFS问题,遍历每个点并且取其最大值;在遍历过程中应该,避免重复遍历,应该设置path[2][4]为每个点为起始点的最长路径长度,初始化为0,如果被遍历过不为0,则返回,否则进行遍历。

class Solution {public:    int longestIncreasingPath(vector<vector<int>>& matrix) {        int maxway=0;        int m=matrix.size();        if(m==0) return 0;        int n=matrix[0].size();                vector<vector<int>> way(m, vector<int>(n, 0));        int path[2][4]={{0,1,0,-1},{1,0,-1,0}};                for(int i=0;i<m;i++)            for(int j=0;j<n;j++){                                    maxway=max(maxway,dfs(i,j,matrix,way,n,m,path));            }            return maxway;    }        int dfs(int x,int y,vector<vector<int>>& matrix,vector<vector<int>>& way,int n,int m,int path[][4] ){        int lx,ly;        if(way[x][y])            return way[x][y];               for(int i=0;i<4;i++){            lx=x+path[0][i];            ly=y+path[1][i];            if(lx<m&&ly<n&&lx>=0&&ly>=0&&matrix[x][y]<matrix[lx][ly])                 way[x][y]=max(way[x][y],dfs(lx,ly,matrix,way,n,m,path));        }                return ++way[x][y];    }};


0 0
原创粉丝点击