接收矩阵并将最快路径输出到;退出“;去那里需要多少钱 所以我又很难理解C++,我已经两次上了程序课,但失败了。我需要帮助。我对编程不再感兴趣了,因为它显然不适合我。我只需要通过考试。问题是:

接收矩阵并将最快路径输出到;退出“;去那里需要多少钱 所以我又很难理解C++,我已经两次上了程序课,但失败了。我需要帮助。我对编程不再感兴趣了,因为它显然不适合我。我只需要通过考试。问题是:,c++,recursion,matrix,C++,Recursion,Matrix,本作业的目标是通过编写一个程序来练习递归算法,该程序接受一个矩阵,表示城堡每个房间的守卫人数,并输出通往公主的最快路径和你必须战斗的守卫人数。 您正在移动的贴图(数组)如下所示: 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 > 我们得到了一个框架,我们必须填写,但我

本作业的目标是通过编写一个程序来练习递归算法,该程序接受一个矩阵,表示城堡每个房间的守卫人数,并输出通往公主的最快路径和你必须战斗的守卫人数。

您正在移动的贴图(数组)如下所示:

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 >
我们得到了一个框架,我们必须填写,但我不知道它的一些做什么,它可能太长,复制和粘贴在这里,我是新的社区。
如果您试图简化问题,您将如何使用递归处理此任务。因此,向右迈出一步,计算这一步的分数,并通过在较小的矩阵上调用相同的函数(不包括左列)将其添加到解决方案的其余部分。然后往下退一步,用较小的矩阵去掉最上面一行。然后选择得分最低的解决方案。

使用递归,您可以尝试简化问题。因此,向右迈出一步,计算这一步的分数,并通过在较小的矩阵上调用相同的函数(不包括左列)将其添加到解决方案的其余部分。然后往下退一步,用较小的矩阵去掉最上面一行。然后选择得分最低的解决方案。

这只是一个动态规划问题。 我不知道如何将二维数组作为函数参数传递

请有人纠正我(如何将“矩阵”数组和“结果”数组作为函数参数传递)。休息一下,一切都好 算法简单。从最后一个位置开始,向后走。 其中结果[i][j]=min(结果[i+1][j],结果[i][j+1])

void函数(int a、int b、int**矩阵、int**结果){
如果(结果[a+1][b]=-1&&结果[a][b+1]=-1){
结果[a][b]=min(函数(a+1,b,矩阵,结果),函数(a,b+1,矩阵,结果));
}
else if(结果[a+1][b]=-1&&result[a][b+1]!=-1){
结果[a][b]=min(函数(a+1,b,矩阵,结果),结果[a][b+1]);
}
否则如果(结果[a+1][b]!=-1和结果[a][b+1]=-1){
结果[a][b]=min(结果[a+1][b],函数(a,b+1,矩阵,结果));
}
返回;
}
int main(){
int p,q;
cin>>p>>q;
整数矩阵[p][q];
对于(int i=0;imatrix[i][j];
}
}
int结果[p][q];
for(int i=0;i=0;i++){
结果[i][q-1]=矩阵[i][q-1]+结果[i+1][q-1];
}
函数(0,0,矩阵,结果);

这只是一个动态规划问题。 我不知道如何将二维数组作为函数参数传递

请有人纠正我(如何将“矩阵”数组和“结果”数组作为函数参数传递)。其余所有部分都可以 算法很简单,只需从最后一个位置开始,然后返回。 其中结果[i][j]=min(结果[i+1][j],结果[i][j+1])

void函数(int a、int b、int**矩阵、int**结果){
如果(结果[a+1][b]=-1&&结果[a][b+1]=-1){
结果[a][b]=min(函数(a+1,b,矩阵,结果),函数(a,b+1,矩阵,结果));
}
else if(结果[a+1][b]=-1&&result[a][b+1]!=-1){
结果[a][b]=min(函数(a+1,b,矩阵,结果),结果[a][b+1]);
}
否则如果(结果[a+1][b]!=-1和结果[a][b+1]=-1){
结果[a][b]=min(结果[a+1][b],函数(a,b+1,矩阵,结果));
}
返回;
}
int main(){
int p,q;
cin>>p>>q;
整数矩阵[p][q];
对于(int i=0;imatrix[i][j];
}
}
int结果[p][q];
for(int i=0;i=0;i++){
结果[i][q-1]=矩阵[i][q-1]+结果[i+1][q-1];
}
函数(0,0,矩阵,结果);

两个词:动态编程两个词:动态编程两个词:动态编程你能给我解释一下你的代码在做什么吗?我有点困惑。你设置了两个矩阵,一个值为{1,2,3,4,5,…}另一个值为{1,-1,-1,-1…}然后呢?结果[I][j]存储从第I行第j列到最后一个位置的最短路径值。所以我们只需要结果[0][0]。所以我用“-1”初始化了结果数组。然后从最后一个位置填充结果数组。你能解释一下你的代码在做什么吗?我有点困惑。你设置了两个矩阵,一个值为{1,2,3,4,5,…。}{-1,-1,-1,-1…}然后呢?结果[i][j]存储从第i行第j列到最后一个位置的最短路径值。所以我们只需要结果[0][0].所以我用'-1'初始化了结果数组。然后从最后一个位置开始填充结果数组。你能解释一下你的代码在做什么吗?我有点困惑。你设置了两个矩阵,一个值为{1,2,3,4,5,…..}另一个值为{-1,-1,-1…}然后呢?结果[I][j]存储从第I行第j列到最后一个位置的最短路径值。因此,我们只需要结果[0][0]。因此,我用“-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;
}