动态规划之矩阵的最小路径和

来源:互联网 发布:hp打印机端口是多少 编辑:程序博客网 时间:2024/04/28 02:11

1、给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和,假设矩阵大小为M*N

解析:这是一道经典的动态规划的题目。m[i][j]代表输入矩阵某一点的路径长度,dp[i][j]代表到(i,j)点的最短路径长度,dp[i][j]=min(dp[i-1][j],dp[i][j-1])+m[i][j].

#include<iostream>#include<vector>using namespace std;int min(int v1, int v2);int main() {int i = 0, j = 0;int M = 0, N = 0;/*给二维vector赋值*/cin >> M >> N;vector<vector<int>> m(M,vector<int>(N));vector<vector<int>>dp(M,vector<int>(N));vector<int> mm(N);/*使用数组方式赋值*///for (i = 0; i < M; i++) {//for (j = 0; j < N; j++) {//cin >> m[i][j];//}//}/*使用迭代器方式赋值*/for (auto it_vv = m.begin(); it_vv != m.end(); ++it_vv) {for (auto it_v = it_vv->begin(); it_v != it_vv->end(); it_v++) { //迭代器的使用方法和指针类似cin >> *it_v;}}dp[0][0] = m[0][0];for (i = 1; i < M; i++) {dp[i][0] = m[i - 1][0] + m[i][0];}for (j = 1; j < N; j++) {dp[0][j] = dp[0][j - 1] + m[0][j];}for (i = 1; i < M; i++) {for (j = 1; j < N; j++) {dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + m[i][j];}}cout << "the minimum path is : " << dp[M - 1][N - 1] << endl;}int min(int v1, int v2) {if (v1 > v2) return v2;else return v1;}


原创粉丝点击