C语言可以帮助我解决我的难题

时间:2017-11-16 08:48:42

标签: c

问题在于:
enter image description here

请帮助我,我可以做些什么来解决这个问题。这就是我输入的方式:

[["ABCD"], 
["ABC", "D"], 
["AB", "CD"], 
["AB", "C", "D"], 
["A", "BCD"], 
["A", "BC", "D"], 
["A", "B", "CD"], 
["A", "B", "C", "D"]]

1 个答案:

答案 0 :(得分:1)

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

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

根据dir更新当前位置,将得分添加到总得分中并以三种可能性递归调用自身:

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

此外,您必须确保不会在相同的字段上一直向左/向右移动(即确保每行只更改一次的方向)并且您必须跟踪,你不计算两次这样的分数(也许是通过使用一个额外的参数,它跟踪当前行中已经访问过的内容)。

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

我希望,这有助于你掌握这一挑战;)