Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
这是问题所在:
请帮助我解决该查询。这就是我接受输入的方式:
它根据目录更新当前位置,将分数添加到总分数中,并使用以下三种可能性递归调用自身:
另外,您必须确保不要一直在同一字段上向左/向右移动(即,确保每行仅改变方向一次),并且必须保持跟踪,不要将这样的分数计算两次(也许可以通过使用其他参数来跟踪当前行中已访问的内容)。
当您在最后一行调用
然后,收集三个
我希望,这可以帮助您掌握这一挑战;)
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
这是问题所在:
请帮助我解决该查询。这就是我接受输入的方式:
#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