64.最小路径之和

mac2026-05-25  5

巨简单和前面的一样。 前面是递归,后面是动态规划,没做对数器,但是应该没问题

#include <iostream> #include <vector> #include <algorithm> #include <limits.h> using namespace std; int minergodic(vector<vector<int>>& grid,int x,int y) { int ret=0; int num1=0; ///<左边的数 int num2=0; ///<上边的数 if(0==x && 0==y) { ret = grid[x][y]; goto OUT; } if(0==x)///<第0行 { num1 = minergodic(grid,x,y-1); num2 = INT_MAX; } else if(0==y) { num1 = INT_MAX; num2 = minergodic(grid,x-1,y); } else { num1 = minergodic(grid,x,y-1); num2 = minergodic(grid,x-1,y); } ret = grid[x][y]+min(num1,num2); OUT: return ret; } int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); ///<m行n列 int ret = 0; int n=0; if(grid.empty()) { ret = 0; goto OUT; } n=grid[0].size(); ret = minergodic(grid,m-1,n-1); OUT: return ret; } int bpp(vector<vector<int>>& grid) { vector<vector<int>> bp(grid.begin(),grid.end()); if(bp.empty()) { return 0; } for(int x=0;x<(int)bp.size();++x) { for(int y=0;y<(int)bp[0].size();++y) { if(0==x && 0==y) { continue; } if(0==x)///<第0行 { bp[x][y] += bp[x][y-1]; } else if(0==y) { bp[x][y] += bp[x-1][y]; } else { bp[x][y] += (min(bp[x][y-1] , bp[x-1][y])); } } } return bp[bp.size()-1][bp[0].size()-1]; } int main(void) { int a1[]={1,3,1}; int a2[]={1,5,1}; int a3[]={4,2,1}; vector<int>b1(begin(a1),end(a1)); vector<int>b2(begin(a2),end(a2)); vector<int>b3(begin(a3),end(a3)); vector<vector<int>>c; c.push_back(b1); c.push_back(b2); c.push_back(b3); cout<<bpp(c)<<endl; return 1; }

如果我的文章帮到了你请点一下赞,我想知道我帮助了多少人

最新回复(0)