思路和想法摘自《程序员代码面试指南》
package JobInterview_01;
public class minPathSumDemo {
public static int minPathSum(int[][] m) {
// 判定矩阵不为空,矩阵的行列的长度不为0 ,元素不为空
if (m == null || m.length == 0 || m[0].length == 0 || m[0] == null) {
return 0;
}
int row = m.length;
int col = m[0].length;
int[][] dp = new int[row][col];
dp[0][0] = m[0][0];
// 为dp[][]的第一行赋值
// 公式为:dp[0][i] = m[0][i] + dp[0][i - 1];
for (int i = 1; i < row; i++) {
dp[0][i] = m[0][i] + dp[0][i - 1];
}
// 为dp[][]的第一列赋值
// 公式为:dp[0][i] = m[0][i] + dp[0][i - 1];
for (int i = 1; i < col; i++) {
dp[i][0] = m[0][i] + dp[i - 1][0];
}
// 求dp[][]矩阵中除去第一行,第一列之外的值
// 公式为dp[i][j] = min{dp[i-1][j],dp[i][j-1]}+m[i][j];
for (int i = 1; i < row; i++) {
for (int j = 1; j < col; j++) {
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + m[i][j];
}
}
//打印dp矩阵
System.out.println("the dp matrix is:");
printMatrix(dp);
//返回最短路径结果:
return dp[row - 1][col - 1];
}
public static void printMatrix(int[][] m) {
System.out.println("print the matrix:");
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[0].length; j++) {
System.out.print(m[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] m = { { 1, 3, 5, 9 }, { 8, 1, 3, 4 }, { 5, 0, 6, 1 },
{ 8, 8, 4, 0 } };
printMatrix(m);
System.out.println("the min path is :" + minPathSum(m));
}
}