你有一个包含一组正数和负数的NxN网格,你必须找到通过它的最佳路径。路径必须通过每行中的一个单元格,并且相邻行上的单元格必须垂直或对角连接。你能找到一个算法来解决这个问题而不评估每个排列吗?
答案 0 :(得分:1)
我假设“最佳路径”被定义为具有最高总和的路径?
您可以使用动态编程。对于每一行,将该行的元素设置为以该行结尾的最佳路径值。所以
solution[i][j] = grid[i][j] + max(solution[i-1][j], solution[i-1][j-1], solution[i-1][j+1])
当然考虑到边界条件。最初的条件是:
solution[0][j] = grid[0][j]
您还需要通过最佳路径跟踪所采用的实际路径(选择哪个网格元素)。到达最后一行后,浏览该行并找到最大值。这将为您提供最佳路径及其价值。