[LeetCode 64 최소 경로 Sum] 동적 계획 계산 경로

문제 설명
m * n 의 사각형 을 지정 합 니 다. 그 중에서 모든 사각형 에 숫자 가 있 습 니 다. 지금 은 사각형 의 가장 왼쪽 위 에서 가장 오른쪽 아래로 이동 합 니 다. 매번 이동 할 때마다 아래 에서 이동 하거나 오른쪽으로 이동 할 수 밖 에 없습니다.모든 경로 가 하나의 경로 와 개념 에 대응 합 니 다. 즉, 이 경로 의 모든 격자 에 있 는 숫자 와 가장 왼쪽 위 에서 가장 오른쪽 아래 까지 의 모든 경로 에서 경로 와 가장 작은 것 을 구하 고 이 경로 와 출력 해 야 합 니 다.
2. 사고방식 해석
이 문제 의 사고방식 은 비교적 간단 하 다. 똑 같이 동적 기획 사고방식 을 이용 하여 문 제 를 해결 하고 기점 에서 m * n 매트릭스 까지 각 칸 의 가장 짧 은 경로 값 을 계산 하여 m8n 크기 의 매트릭스 path 에 저장 하고 마지막 으로 path [m - 1] [n - 1] 을 출력 하면 된다.모든 격자 는 위 나 왼쪽 격자 만 지나 갈 수 있 기 때문에 이 격자 의 최소 경로 값 은 이 격자 값 에 왼쪽 격자 와 위 격자 중 경로 값 이 작은 것 을 더 하면 공식 path [i] [j] = grid [i] [j] + min (path [i - 1] [j], path [i] [j - 1]) 을 얻 을 수 있 고 공식 에 따라 각 격자 의 최소 경로 값 을 계산 하면 된다.
3. 코드 구현
class Solution {
public:
    int minPathSum(vector>& grid) {
        int n = grid[0].size();
        int m = grid.size();
        vector> path(m,vector (n,0));
        path[0][0] = grid[0][0];
        if(m == 1 && n == 1) return grid[0][0];
        for(int i  = 1; i < n;i++) {
            path[0][i] = path[0][i - 1] + grid[0][i];
        }
        for(int i  = 1; i < m;i++) {
            path[i][0] = path[i - 1][0] + grid[i][0];
        }
        if(m > 1 && n > 1) {
            for(int i = 1; i  < m; i++) {
                for(int j = 1; j < n; j++) {
                    path[i][j] = grid[i][j] + min(path[i - 1][j],path[i][j - 1]);
                }
            }
        }
        return path[m - 1][n - 1];
    }
};

좋은 웹페이지 즐겨찾기