问题https://www.geeksforgeeks.org/find-whether-path-two-cells-matrix/的扩展
这里必须找出在矩阵的top left
至bottom right
角是否存在路径。如问题所述,两者之间将有障碍。现在我的问题是,如果没有从源到目的地的路径,则必须在矩阵中翻转的最小障碍是什么?
在源和目标之间。
答案 0 :(得分:0)
为更清楚地说明您的问题,让我们假设我们将得到一个二维网格,其中包含row
行数和col
列数的整数,其中包含整数0
和{{ 1}}。
0 :空白单元格。
1 :障碍。
您想知道从矩阵的左上角到右下角开始构建路径和最短路径的矩阵中必须翻转的最小障碍物吗?
a)具有最少障碍物的路径:
我们只需应用广度优先搜索(BFS)或深度优先搜索(DFS),并将进入空白的成本设为1
,将进入障碍物的成本设为0
,即可找到障碍物数量最少的路径。并且,我们可以从每个单元格向上,向下,向右和向左遍历所有方向。这样计算出的最短路径的距离将为我们提供从矩阵的左上角到右下角的最小障碍物翻转路径。
b)具有最少障碍物的最短路径:
从矩阵的左上角到右下角的最短路径长度将始终相同,等于row + col-2,这可以通过从网格中的每个像元向右或向下遍历来实现。因此,也可以使用BFS或DFS并仅从每个单元格向右或向下遍历,并以进入空白空间的成本为1
和进入障碍物的成本为0
来解决此问题。以这种方式计算出的最短路径的距离将为我们提供使用最短路径之一从矩阵的左上角到右下角翻转的最小障碍物数量。由于遍历时没有循环,因此我们也可以使用动态编程解决此问题。