动态规划2

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

 

#include <algorithm>
#include <iostream>
using namespace std;

#include <vector>

int MinimumPath(int n, int m){

    vector<vector<int>> a(n, vector<int>(m));
    vector<vector<int>> b(n+1, vector<int>(m+1));
//初始化各个位置的值
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){

            if (i == 0 && j == 0){
                a[i][j] = 1;
            }
            else if (j == 0){
                a[i][j] = a[i - 1][m - 1] + 1;
            }
            else{
                a[i][j] = a[i][j-1] + 1;
            }
            cout << a[i][j] << "   ";
        }
        cout << endl;
    }

// 每一个位置的值 都等于它前一个位置+要到达的位置。
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            if (i == 0 && j == 0){
                b[i+1][j+1] = a[i][j];
            }
            else{
                b[i+1][j+1] = min(b[i + 1][j] + a[i][j], b[i][j + 1] + a[i][j]);
            }

        }
    }
    return b[n][m];
}

int main(void)
{
    cout << MinimumPath(10, 10) << endl;;

}

 

 

posted @ 2016-09-05 11:35  于光远  阅读(150)  评论(0编辑  收藏  举报