矩阵最小路径和练习题

题目:有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100.

思路:典型dp,比较简单,用有一个二维表记录到达每个格子的最小路径,对于第一行和第一列,到达每个格子只可能从一个方向,所以先求第一行,第一列,之后由特殊到一般,对于其他任意的dp[i][j]来说,只有可能从两个方向来的,上或者左,选较小的那个。然后从左到右,从上到下依次求每个格子,最右下角即为所求

  public int getMin(int[][] map, int n, int m) {
        int[][] dp=new int[n][m];
        dp[0][0]=map[0][0];
      //第一列
        for(int i=1;i<n;i++){
            dp[i][0]=map[i][0]+dp[i-1][0];
        }
    //第一行
for(int i=1;i<m;i++){ dp[0][i]=map[0][i]+dp[0][i-1]; } for(int i=1;i<n;i++){ for(int j=1;j<m;j++){ dp[i][j]=map[i][j]+Math.min(dp[i][j-1],dp[i-1][j]); } } return dp[n-1][m-1]; }
原文地址:https://www.cnblogs.com/team42/p/6732961.html