【发布时间】:2011-11-02 18:34:16
【问题描述】:
我想计算给定二维数组中的最小总和
#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) 可以遍历。您可以假设所有成本都是正整数。
【问题讨论】:
-
你能用文字描述你的算法吗?这适用于代码中的注释块。
-
我想不出任何方法来解释结果是 8,除了找到最大元素:(
-
您添加的描述不是对您的算法的描述,而是对问题陈述的描述。
-
是的,但是,这里有算法提示,那么我的问题定义有什么问题?是代码的动态实现