所以我在理解c ++方面遇到了很多麻烦我已经两次参加我的编程课程并且失败了。我需要帮助。我对编程不感兴趣,因为它显然不适合我。我只需要通过。这就是问题所在:
这项任务的目标是通过编写一个程序来练习递归算法,该程序接收表示城堡每个房间中警卫数量的矩阵,并输出公主的最快路径和数字你将不得不战斗。
您正在通过看起来像的地图(数组):
5 5
6 2 3 44 15
1 7 2 9 10
11 1 5 14 12
5 17 2 1 20
21 7 33 4 25
第一个数字是数组的大小,你只能向右和向下移动。 所以输出将是:
50 > > v v v > v >
我们已经给出了一个我们必须填写的骨架,但我不知道它的作用是什么,复制和粘贴可能太长了,我是新的社区。 你会如何处理这项任务
答案 0 :(得分:0)
使用递归尝试简化问题。因此,向右迈出一步,计算此步骤的得分,并通过在较小的矩阵上调用相同的函数将其添加到解决方案的其余部分(省略左列)。然后退一步,用较小的矩阵做同样的事情,留下顶行。然后选择得分最低的解决方案。
答案 1 :(得分:0)
这只是一个动态编程问题。 我不知道如何将2-d数组作为函数参数传递。
请有人纠正我(如何将'matrix'数组和'result'数组作为函数参数传递)。休息一切都很好 算法很简单。从最后一个位置开始,然后倒退。 其中result [i] [j] = min(结果[i + 1] [j],结果[i] [j + 1])
void function(int a,int b,int** matrix,int** result){
if(result[a+1][b] == -1 && result[a][b+1] == -1){
result[a][b] = min(function(a+1,b,matrix,result),function(a,b+1,matrix,result));
}
else if(result[a+1][b] == -1 && result[a][b+1] != -1){
result[a][b] = min(function(a+1,b,matrix,result),result[a][b+1]);
}
else if(result[a+1][b] != -1 && result[a][b+1] == -1){
result[a][b] = min(result[a+1][b],function(a,b+1,matrix,result));
}
return;
}
int main(){
int p,q;
cin>>p>>q;
int matrix[p][q];
for(int i=0;i<p;i++){
for(int j=0;j<q;j++){
cin>>matrix[i][j];
}
}
int result[p][q];
for(int i=0;i<p;i++){
for(int j=0;j<q;j++){
result[i][j] = -1;
}
}
result[p-1][q-1] = matrix[p-1][q-1];
for(int i=q-2;i>=0;i++){
result[p-1][i] = matrix[p-1][i] + result[p-1][i+1];
}
for(int i=p-2;i>=0;i++){
result[i][q-1] = matrix[i][q-1] + result[i+1][q-1];
}
function(0,0,matrix,result);
cout<<results[0][0]<<endl;
}