我想知道我可以在给定的数组中计算2条特定路径吗。
> < li>
如何返回从[0][0]到[m][n]的最短(或最长)路径?我设法递归地遍历数组,但是我不知道如何“保存”路径并检查哪一个返回的路径更小。
第二个请求是一个我已经纠结了很长时间的问题,但我看到了关于使用和计算这些数组中的值的其他问题。
由于你没有很好地描述,我将尽我所能解释基本概念。
1)检查当前坐标是否达到目标,返回当前总和。这是基本情况。
2)检查当前采取的步骤是否超过防止无限重现所需的最大步骤数。这是失败的情况,当使用广度优先搜索时是必要的。
3) 检查您要行走的下一个所需位置是否在网格内,并且以前从未访问过。将其标记为已访问并保存该路径的总和。当你回来时,将那个位置标记为未访问,然后尝试下一步行动……等等,所有可能的方向。
4)当尝试了所有可能的路径时,比较它们的结果,看看哪个是最小的,并将其作为解决方案返回。
使用深度第一递归的示例:
public void solve(int[][] a, boolean[][] visited, int sum, int steps, int x, int y, int xMax, int yMax) {
if (isSolved(x, y)) { // Base case - solved
return sum;
}
if (steps > MAX_STEPS) {
return Integer.MAX_VALUE; // Return invalid if the algorithm exceeds maximum steps to prevent unlimited seek time
}
int[] path = new int[NUM_PATHS]; // An array holding the calculated paths for all possible options. Should
for (int i = 0; i < NUM_PATHS; i++) {
path[i] = Integer.MAX_VALUE; // Should be set to fail case as default.
}
if (canReach(x + 1, y) && !visited[y][x +1]) {
visited[y][x + 1] = true;
path[0] = solve(a, visited, sum + a[y][x + 1] steps + 1, x + 1, y, xMax, yMax);
visited[y][x + 1] false;
}
if (canReach(x - 1, y) && !visited[y][x - 1]) {
...
}
... etc
// Finding the best solution
min = path[0];
for (int i = 1; i < path.length; i++) {
if (path[i] < min)
min = path[i];
}
return min;
}
使用动态规划,您可以优化算法以忽略比之前发现的最佳路径更差的路径,从而缩短所需的递归。
此外,如果您想保存所采用的路径,请通过ArrayList进行保存,并像您将节点标记为已访问时一样添加/删除它。
我试图使用DFS解决一个图形问题,但遇到了一堵墙。这是我在Python3中的实现。unvisited是一个整数数组,start和end是unvisited中的整数,path是一个空数组,在DFS运行时填充,edges是一个边字典。 目标是找到一条从开始到结束访问unvisted中所有int的路径。因此,我遇到了递归的问题(我认为),因为在路径错误的情况下,我不想返回任何东西;相反,我希望DFS继续
我正在尝试编写递归方法,如果存在从[0]到[a.length-1]的路径,当您可以对a[I]求和或求减法时,该方法将返回true。例如,在数组a={2,4,1,6,4,2,4,3,5}中,该方法返回true,因为0 2-1 4 2-3 4=8=a[a.length-1]。我尝试了一些方法,但我得到了堆栈溢出或错误的输出。
我需要编写一个递归方法,它需要两个并行数组和单词来查找,查找指定的单词并在另一个数组上每次索引匹配时求和值。例如: 如果我说我需要查找单词,它应该在找到索引时对第二个数组上的值求和。在这种情况下,它应该求和,。 如何使我的递归方法使其采用适当的参数并递归地进行计算。我将使用硬编码值。 这是我目前所拥有的。我很确定我的递归方法需要更多参数,但我会看看是否有人能帮助我
问题内容: 对于需要解决的问题之一,我使用for循环找到了数组的最大值,因此我尝试使用递归找到它,这就是我想出的: 因此它可以正常工作并获取最大值,但是我的问题是:对于基本情况,返回a [head]以及对于在开头处的值大于最后一个值的情况,可以吗? 问题答案: 您只需一个计数器即可轻松完成此操作,只需使用您这次想要比较的值的索引即可: 这样可以更好地显示正在发生的情况,并使用默认的“递归”布局,例
在PHP中,检查数组是否为递归数组的最佳方法是什么? 给定以下代码: 从PHP手册: print\u r()在到达数组的第三个元素时将显示递归。 似乎没有其他方法可以扫描数组中的递归引用,因此如果需要检查它们,则必须使用print\u r()及其第二个参数来捕获输出并查找单词RECURSION。 还有更优雅的检查方式吗? 附:这就是我如何使用regex和print\u r()检查和获取递归数组键的