【问题标题】:Minimum flips required to make path between source and destination in a matrix在矩阵中的源和目标之间建立路径所需的最小翻转
【发布时间】:2019-05-01 03:07:10
【问题描述】:
【问题讨论】:
标签:
algorithm
data-structures
dynamic-programming
graph-algorithm
breadth-first-search
【解决方案1】:
为了更清楚您的问题,假设我们将获得一个二维网格,其中包含 row 行数和 col 整数列数,其中包含整数 0 和 1。
0 :空白单元格。
1:障碍物。
您想知道从矩阵的左上角到右下角构建路径和最短路径必须在矩阵中翻转的最小障碍?
a) 障碍物最少的路径:
我们可以简单地应用广度优先搜索(BFS)或深度优先搜索(DFS)并以进入空白空间的成本为0和进入障碍物的成本为1,找到障碍物数量最少的路径。而且,我们可以从每个单元格向上、向下、向右和向左遍历所有方向。这样算出的最短路径距离,就是矩阵左上角到右下角的最小障碍物翻转路径。
b) 障碍物最少的最短路径:
从矩阵的左上角到右下角的最短路径长度将始终相同,等于 row + col - 2,这可以通过从网格中的每个单元格向右或向下遍历来实现。所以,这个问题也可以使用 BFS 或 DFS 来解决,只从每个单元格向右或向下遍历,并将进入空白空间的成本设为0,将进入障碍的成本设为1。以这种方式计算的最短路径距离将为我们提供使用最短路径之一从矩阵的左上角到右下角翻转的最少障碍物数量。由于遍历时不会有循环,我们也可以使用动态规划来解决这个问题。