当前位置:   article > 正文

动态规划——矩阵问题_有一个5x4的矩阵,从左上角的格子开始每次只能向右或者向下走,最后到达右下角

有一个5x4的矩阵,从左上角的格子开始每次只能向右或者向下走,最后到达右下角

题目

给定一个矩阵arr,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有数字累加起来就是路径和,返回所有路径中最小路径和,如果给定的arr如大家看到的样子,路径1,3,1,0,6,1,0就是路径中和最小的,所以返回12。

  1. //矩阵arr
  2. 1 3 5 9
  3. 8 1 3 4
  4. 5 0 6 1
  5. 8 8 4 0

思路

生成大小和arr一样的矩阵dp,dp[i][j]的值表示从左上角,也就是(0,0)位置,走到(i,j)位置的最小路径和。
dp第一行的值就是arr第一行的值不断累加的结果。
dp第一列的值就是arr第一列的值不断累加的结果。
dp[i][j]=arr[i][j]+min(dp[i-1][j],dp[i][j-1])

代码如下:

  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int arr[4][4]=
  5. {
  6. {1,3,5,9},
  7. {8,1,3,4},
  8. {5,0,6,1},
  9. {8,8,4,0}
  10. };
  11. int minStep(int row,int col,int dp[][4])
  12. {
  13. int s1,s2;
  14. for(int i=0;i<row;++i)
  15. {
  16. for(int j=0;j<col;++j)
  17. {
  18. int s1=1000;
  19. int s2=1000;
  20. if(i==0&&j==0)
  21. {
  22. dp[i][j]=1;
  23. continue;
  24. }
  25. else if(i==0&&j==1)
  26. {
  27. dp[i][j]=4;
  28. continue;
  29. }
  30. else if(i==1&&j==0)
  31. {
  32. dp[i][j]=9;
  33. continue;
  34. }
  35. //向上,向左
  36. if(i-1>=0)
  37. s1=dp[i-1][j]+arr[i][j];
  38. if(j-1>=0)
  39. s2=dp[i][j-1]+arr[i][j];
  40. dp[i][j]=min(s1,s2);
  41. }
  42. }
  43. return dp[row-1][col-1];
  44. }
  45. int main()
  46. { int row,col;
  47. int dp[4][4]={1000};
  48. row=4;
  49. col=4;
  50. cout<<minStep(row,col,dp)<<endl;
  51. system("pause");
  52. return 0;
  53. }


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/484258
推荐阅读
相关标签
  

闽ICP备14008679号