查找其元素总和为矩阵中给定数字的路径

时间:2018-06-02 03:29:02

标签: java c++ algorithm

给定一个M x N矩阵和一个正整数p,我怎样才能在位置0,0开始的矩阵中递归地找到一个连续路径,该路径将总和为p?您可以向左移动(col-1),向右移动(col + 1),向上移动(row-1)或向下移动(row + 1),并且只能在路径中使用一次位置。如果矩阵中有这样的路径,则将其输出到具有相同形状的单独矩阵中,方法是将路径上的位置填充为1,其余位置填充为0.

我真的冻结了,可以做任何事情,有没有解决这类问题的技巧?如何继续解决这个问题,我们将非常感激解决方案。

以下是p = 73

的示例
2  8  15 
1  10 5
19 19 3  
5  6  6
2  8  2

输出:

1  0  0
1  0  0
1  1  1
1  1  1
1  1  1

1 个答案:

答案 0 :(得分:1)

"应该随机移动"是(可能是故意的)误导。你想要做的是有效地深度优先搜索,系统地测试可能的路线。如果路线等于(您已完成)或超过目标号码,则会终止。在这种情况下,您会备份。

如果我们假设路线不能自行加倍(你没有说),那么可以使用的是左侧(或右侧)边缘模式,就像标准的迷宫求解器一样。因此,在每个访问的新节点上,它进入最左边的未访问的相邻节点,随后以顺时针方向尝试其他相邻节点。

(如果路径可以重新访问节点,则将矩阵视为4树并选择任意方向进行测试。)