Skip to content

Latest commit

 

History

History
37 lines (36 loc) · 1.45 KB

1219.Path_w.Max_gold.md

File metadata and controls

37 lines (36 loc) · 1.45 KB
  1. grid要遍历所有的格点的题,都是用dfs, bfs遍历;
  2. 主函数就是遍历,从左上到右下,调用dfs函数;
  3. 所有的约束条件都在dfs这个辅助函数中;
  4. 如果0表示不能进入并且每个cell只能遍历一次,那么遍历grid[i][j]之后把它赋值为0: grid[i][j]=0这样下次就不会经过这个节点了;
  5. 因为是累加得到最后的结果,所以每次都是temp+dfs(grid, ixx, jxx);
  6. 朝不同的方向dfs每次得到的结果并不一定会变大,所以用max函数.

C++:

class Solution {
    int m, n;
public:
    int getMaximumGold(vector<vector<int>>& grid) {
        int res = 0;
        m = grid.size();
        n = grid[0].size();
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                res = max(res, dfs(grid, i, j)); // 这里并不累加得到最终结果,逻辑处理都在dfs函数中
            }
        }
        return res;
    }
    int dfs(vector<vector<int>>& grid, int i, int j) {
        if (grid[i][j] == 0) return 0;
        int temp = grid[i][j];
        int res = 0;
        grid[i][j] = 0;
        if (i < m-1) res = max(res, temp + dfs(grid, i+1, j));
        if (i > 0) res = max(res, temp + dfs(grid, i-1, j));
        if (j < n-1) res = max(res, temp + dfs(grid, i, j+1));
        if (j > 0) res = max(res, temp + dfs(grid, i, j-1));
        grid[i][j] = temp;
        return res;
    }
};