저자: Xiao Xun
링크: https://leetcode.cn/problems/minimum-falling-path-sum/solutions/2341965/ji-yi-hua-sou-suo-zhu-shi-chao-ji-xiang-3n58v/
출처: LeetCode의
저작권은 작성자에게 있습니다. 상업용 전재의 경우 저자에게 승인을 요청하고 비상업적 전재의 경우 출처를 표시하십시오.
주제![](https://img-blog.csdnimg.cn/54ab702e7c8f4f7e886cf31209f97392.png)
예![](https://img-blog.csdnimg.cn/f520816e1e5048ffa579c61a759d2590.png)
생각의 기차
제목 -> 2차원 배열이 주어졌을 때 첫 번째 행부터 마지막 행까지의 경로와 최소값을 반환
간단하고 직접적인 방법은 모든 경로 합계를 찾은 다음 모든 경로 합계에서 최소값을 찾아 반환하는 것입니다.
위와 같은 문제는 깊이 우선 탐색 과정인 재귀를 이용하여 해결할 수 있다. 아래에서 위로 최종 반환 값은 min이어야 합니다. 모든 시작 위치를 열거하고 최소값을 취합니다.
int dfs(int **matrix, int n, int m, int i, int j)
{
if (j < 0 || j >= m) return INT_MAX;
if (i == n-1) return matrix[i][j];
int left = INT_MAX, mid = INT_MAX, right = INT_MAX;
left = dfs(matrix, n, m, i + 1, j - 1);
mid = dfs(matrix, n, m, i + 1, j);
right = dfs(matrix, n, m, i + 1, j + 1);
return fmin(fmin(left, mid), right) + matrix[i][j];
}
시작 위치가 다르면 중간 거리에 같은 장소가 많고 위의 방법은 여전히 중간에 반복된 장소를 재귀적으로 열거하고 반복 계산이 많습니다.배열을 사용하여 이동한 경로를 기록할 수 있습니다. 다음 번에 도착 배열 레코드의 값은 현재 위치에서 직접 반환되며 위의 방법은 메모리 검색입니다.
코드 주석은 매우 상세합니다.
코드
int dfs(int **matrix, int n, int m, int i, int j, int (*ans)[m])
{
if (j < 0 || j >= m) return INT_MAX;//越界无效值
if (ans[i][j] != INT_MAX) return ans[i][j];//重复路径
if (i == n-1) return matrix[i][j];//底部返回
int left = INT_MAX, mid = INT_MAX, right = INT_MAX;
left = dfs(matrix, n, m, i + 1, j - 1, ans);//左边路径
mid = dfs(matrix, n, m, i + 1, j, ans);//中间路径
right = dfs(matrix, n, m, i + 1, j + 1, ans);//右边路径
//保存当前位置路径最小值,记忆化保存
ans[i][j] = fmin(fmin(left, mid), right) + matrix[i][j];
return ans[i][j];
}
int minFallingPathSum(int** matrix, int matrixSize, int* matrixColSize){
int min = INT_MAX;
int n = matrixSize, m = matrixColSize[0];
int ans[n][m];
for (int i = 0; i < n; ++i) {//记忆化数组初始化
for (int j = 0; j < m; ++j) {
ans[i][j] = INT_MAX;
}
}
for (int i = 0; i < m; ++i) {//枚举每一个起点位置
int sum = dfs(matrix, n, m, 0, i, ans);
min = fmin(min, sum);//保存最小值路径
}
return min;
}
作者:小迅
链接:https://leetcode.cn/problems/minimum-falling-path-sum/solutions/2341965/ji-yi-hua-sou-suo-zhu-shi-chao-ji-xiang-3n58v/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。