我想计算给定二维数组中的最小和

#include<iostream>
#include<limits.h>
using namespace std;
#define R 3
#define C 3
int Min(int x,int y,int z){
   if(x<y){
        return (x<z)?x:z;
   }
   else
       return (y<z)?y:z;
   }
int mincost(int cost[R][C],int m,int n){

    int i,j;
    int t[R][C];
    t[0][0]=cost[0][0];
    for(i=1;i<=m;i++)
        t[i][0]=t[i-1][0]+cost[i][0];
    for(j=1;j<=n;j++)
t[0][j]=t[0][j-1]+cost[0][j];
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            t[i][j]=Min(t[i-1][j-1],t[i-1][j],t[i][j-1]+cost[i][j]);
        }
    }
      return t[m][n];

}

int main(){

    int cost[R][C]={{1,2,3},
                    {4,8,2},
                    {1,5,3}};
    cout<<mincost(cost,2,2)<<endl;


    return 0;
}

从起点(0,0)到这个数组的某个点(m,n),它等于8,但是输出显示1,为什么?这个密码怎么了?
文字算法
给定成本矩阵cost[][]和cost[][]中的位置(m,n),编写一个函数,返回从(0,0)到(m,n)的最小成本路径的成本。矩阵中的每个单元格都表示遍历该单元格的成本。到达路径(m,n)的总成本是该路径上所有成本(包括源和目标)的总和。只能遍历给定单元格中的向下、向右和对角较低的单元格,即来自给定单元格(i,j)的单元格(i+1,j),(i,j+1)和(i+1,j+1)的单元格你可以假设所有的成本都是正整数。

最佳答案

我看到这是一个动态编程解决方案。
你在这里输入错误:

t[i][j]=Min(t[i-1][j-1],t[i-1][j],t[i][j-1]+cost[i][j]);

应该是:
t[i][j]=Min(t[i-1][j-1],t[i-1][j],t[i][j-1]) + cost[i][j];

基本上它的工作方式是t[i][j] = t[i-1][j-1]
注意:调试这些问题的一个好方法是打印中间矩阵(此处:t)。

关于c++ - 最低费用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7985564/

10-10 01:03