打印在网格中从起点到终点创建最小成本路径的元素

时间:2017-04-25 16:09:19

标签: algorithm

我们可以计算最小成本假设采取这种递归关系

分钟(垫[I-1] [j]时,垫[i] [j-1])+垫[i] [j];

0 1 2 3

4 5 6 7

8 9 10 11

使用上述递推关系计算最小成本,我们将得到最小成本(1,2)= 0 + 1 + 2 + 6 = 9

我得到最低成本金额,这没有问题..现在我想打印元素0,1,2,6 bcz这个元素正在制作最小成本路径。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

除了使用您提到的关系计算最小成本矩阵外,您还可以创建前置矩阵。

对于每个单元格(i,j),您还应该存储有关谁是" min"的信息。在你提到的关系中(是左边的元素,还是上面的元素?)。通过这种方式,您将了解每个单元格,它是最佳路径中的前一个单元格。

然后,你可以从最后一个单元格开始生成路径,然后根据"前身"矩阵,直到你到达左上角的单元格。

请注意,在不明确构建前置矩阵的情况下,也可以应用后向思想。在每一点上,您都需要查看哪些候选前辈的总成本较低。

答案 1 :(得分:0)

假设您的端点为[x, y],起点为[a, b]。在递归步骤之后,现在从端点开始并爬行/回溯到起始点。

这是伪代码:

# Assuming grid is the given input 2D grid
output = []
p = x, q = y
while(p != a && q != b):
    output.add(grid[p][q])
    min = infinity
    newP = -1, newQ = -1
    if(p - 1 >= 0 && mat[p - 1][q] < min):
        min = matrix[p  -1][q]
        newP = p - 1
        newQ = q

    if(q - 1 >= 0 && mat[p][q - 1] < min):
        min = mat[p][q - 1]
        newP = p
        newQ = q - 1

    p = newP, q = newQ
end

output.add(grid[a][b])

# print output

注意,这里我们使用了matgrid - 两个2D矩阵,其中grid是给定输入,mat是递归步骤{{1}之后生成的矩阵}}

希望它有所帮助!