Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        2年前关闭。
                                                                                            
                
        
这是问题所在:
c - C语言可以帮助解决我的难题-LMLPHP

请帮助我解决该查询。这就是我接受输入的方式:

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

int matrix(int A_size_rows, int A_size_cols, int** A) {

}

int main() {
    int n;
    int m;
    scanf("%i %i", &n, &m);
    int A[n][m];
    for (int A_i = 0; A_i < n; A_i++) {
       for (int A_j = 0; A_j < m; A_j++) {

          scanf("%i",&A[A_i][A_j]);
       }
    }
    int result = matrix(n, m, A);
    printf("%d\n", result);
    return 0;
}

最佳答案

您可能必须采用递归回溯算法来找到要达到的最大分数。构造函数

int move (int dir, int curx, int cury, int curscore) {
    ...
}


它根据目录更新当前位置,将分数添加到总分数中,并使用以下三种可能性递归调用自身:

move (MOVE_LEFT,  newx, newy, newscore);
move (MOVE_RIGHT, newx, newy, newscore);
move (MOVE_DOWN,  newx, newy, newscore);


另外,您必须确保不要一直在同一字段上向左/向右移动(即,确保每行仅改变方向一次),并且必须保持跟踪,不要将这样的分数计算两次(也许可以通过使用其他参数来跟踪当前行中已访问的内容)。

当您在最后一行调用MOVE_DOWN时,递归终止。
然后,收集三个move()调用的返回值,并使用最大的一个作为自己的返回值。这应该给您正确的结果。

我希望,这可以帮助您掌握这一挑战;)

10-08 03:12