最小路径和

#include <iostream>
#include <algorithm>

using namespace std;

int mapx[3][5]=
{
    1,2,3,4,5,
    6,7,8,9,1,
    2,3,4,5,6
};

int dp[3][5]={0};

int main()
{
    dp[0][0] = mapx[0][0];
    for(int i=1;i<5;i++)
    {
        dp[0][i] = dp[0][i-1] + mapx[0][i];
    }
    for(int i=1;i<3;i++)
    {
        dp[i][0] = dp[i-1][0] + mapx[i][0];
    }
    for(int i=1;i<3;i++)
    {
        for(int j=1;j<5;j++)
        {
            dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + mapx[i][j];
        }
    }
    cout<<dp[2][4]<<endl;
    return 0;
}

设置数组dp[i][j]用于表示从mapx[0][0]点到mapx[i][j]点的最短路径和;

考虑边界问题,既是两个边,要根据实际情况设置。比如这里的两个边dp[i][0],dp[0][j]分别表示从mapx[0][0]点到mapx[i][0]和mapx[0][i]的最短路径和,那么也就是沿着两条边线不断累加;

剩下的就是每走一部就比较下,向下走和向右走的哪一个划算,然后取哪一个;

最后,最右下角的值就是待求的最小路径和!

posted on 2018-09-17 10:54  HelloWorldTotti  阅读(172)  评论(0编辑  收藏  举报

导航