コード例 #1
0
ファイル: Q064_MinimumPathSum.cpp プロジェクト: lbl1985/cc150
 int minPathSumHelper(int m, int n, const vector<vector<int>>& grid, vector<vector<int>>& rec)
 {
     if(m == m_rows - 1 && n == m_cols - 1){
         rec[m][n] = grid[m][n];
         return grid[m][n];
    }
    if(rec[m][n] == -1) {
        int cur = grid[m][n];
        rec[m][n] = cur + min(m < (m_rows - 1) ? minPathSumHelper(m+1, n, grid, rec) : INT_MAX, 
                          n < (m_cols - 1) ? minPathSumHelper(m, n+1, grid, rec) : INT_MAX);
    }
    return rec[m][n];
 }
コード例 #2
0
 void minPathSumHelper(int row, int col, vector<vector<int>> &grid, int &sum, int &res) {
     if (sum > res) return;
     
     if (row == 0 && col == 0) {
         res = min(res, sum + grid[row][col]);
     }
     sum += grid[row][col];
     if (row) {
         minPathSumHelper(row - 1, col, grid, sum, res);
     }
     if (col) {
         minPathSumHelper(row, col - 1, grid, sum, res);
     }
     sum -= grid[row][col];
 }
コード例 #3
0
ファイル: Q064_MinimumPathSum.cpp プロジェクト: lbl1985/cc150
 int minPathSum(vector<vector<int>>& grid) {
     m_rows = (int)grid.size();
     m_cols = (int)grid[0].size();
     if(m_rows == 0 || m_cols == 0) return 0;
     if(m_rows == 1 && m_cols == 1) return grid[0][0];
     int s = max(m_rows, m_cols);
     vector<vector<int>> rec;
     for(int i = 0; i < s; i++){
         rec.push_back(vector<int>(s, -1));
     }
     return minPathSumHelper(0, 0, grid, rec);
 }
コード例 #4
0
 int minPathSum(vector<vector<int>>& grid) {
     int res = INT_MAX;
     int sum = 0;
     minPathSumHelper(grid.size() - 1, grid[0].size() - 1, grid, sum, res);
     return res;
 }