【发布时间】:2016-03-27 16:58:50
【问题描述】:
这是在线评委, https://leetcode.com/problems/longest-increasing-path-in-a-matrix/
为什么我无法使用 DFS 获得结果?
正如您从每个单元格中知道的那样,您可以向四个方向移动:左、右、上或下。
存储最长递增路径的长度。
/*
for each elem, neighbours dfs
*/
class Solution {
public:
int longestIncreasingPath(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
int x[] = {0,1,0,-1};// l-r -1,1
int y[] = {1,0,-1,0};// up-down +1,-1
int maxlen = 0;
for(int i = 0; i < row; i++){
for(int j = 0; j< col; j++){
// each node in the matrix[i][j], neighbours
int len = 0;
dfs(maxlen, len, i, j, x, y, matrix);
}
}
return maxlen;
}
private:
bool isIn(int x, int y, int row, int col){
if(x>=0&&x<=col && y>=0&&y<=row) return true;
else return false;
}
void dfs(int& maxlen, int len, int i, int j,int* x, int* y, vector<vector<int>> matrix){
int row = matrix.size();
int col = matrix[0].size();
for(int k = 0; k < 4; k++){
int i_t = i+x[k];//the current position
int j_t = j+y[k];
if(isIn(i_t,j_t,row,col)&& (matrix[i_t][j_t]>matrix[i][j]) ){ // if inside the matrix, within the boundary&& the value of (i_t,j_t)>
len+=1;
maxlen = max(len,maxlen);
dfs(maxlen, len, i_t, j_t, x, y, matrix);
}
}
}
};
【问题讨论】:
标签: c++ algorithm matrix depth-first-search