在具有扭曲的2D网格中从(0,0)到(N-1,N-1)的唯一路径

时间:2014-12-03 01:26:54

标签: java algorithm graph dynamic-programming

路径只能从(0,0)开始在网格中左右移动。最终它需要到达(N-1,N-1)。

如果网格是NxN,则有2N选择N个这样的路径,随着N的增加呈指数增长,并且由于内存限制,我无法将所有这些路径存储在列表中。我们还可以将每个路径编码为长度为2 ^(N-1)的位串,其中1是右移动而0是向下移动。每个编码路径中有相等数量的0和1。

我得到了一个尺寸为NxN的二维方格。网格中的每个单元格都具有非负值。我需要为每个唯一路径求和所有这些值。我怎样才能有效地做到这一点?

1 个答案:

答案 0 :(得分:2)

让我们调用值矩阵V,因此V [y] [x]是单元格(x,y)处的值。

每条路径从(0,0)开始,到(N - 1,N - 1)结束。路径P的总值,值(P)是位于P上的所有单元的值的总和。

问题是计算从(0,0)到(N-1,N -1)的所有有效路径P的SUM(值(P))。

计算SUM的另一种方法是计算每个单元格(x,y),计算通过此单元格的路径数,而不是枚举每个有效路径。如果有i个路径通过此单元格,则此单元格贡献的总值为i * V [y] [x]。因此,我们只需遍历网格中的每个单元格,为其计算i(x,y),将i(x,y)* V [y] [x]添加到总结果中。

如何计算i(x,y)?我(x,y)就是号码。有效路径从(0,0)到(N-1,N-1)到(x,y)。提示: - 如果有从(0,0)到达(x,y)的方法和从(x,y)到达(N-1,N-1)的b方式,那么有一个* b方式到通过(x,y)从(0,0)到达(N-1,N-1)。休息很容易。