在矩阵中在源和目标之间建立路径所需的最小翻转
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在矩阵中在源和目标之间建立路径所需的最小翻转相关的知识,希望对你有一定的参考价值。
问题https://www.geeksforgeeks.org/find-whether-path-two-cells-matrix/的扩展
这里必须找到路径是否存在于top left
到bottom right
矩阵的角落。如问题所述,两者之间会有障碍。现在我的问题是,如果没有从源到目的地的路径,那么必须在矩阵中翻转的最小障碍是什么:
- a)一条路。
- b)最短路径
源和目的地之间。
为了更清楚你的问题,我们假设我们将给出一个二维网格,其中row
行数和col
整数列包含整数0
和1
。
0:空白单元格。 1:障碍。
您想知道必须在矩阵中翻转以构建路径的最小障碍物以及从矩阵的左上角到右下角开始的最短路径?
a)障碍物数量最少的路径:
我们可以找到具有最小障碍数量的路径,只需应用广度优先搜索(BFS)或深度优先搜索(DFS),并将进入空白的成本视为0
,并将成本作为1
进入障碍。而且,从每个单元格,我们可以向上,向下,向右和向左遍历所有方向。以这种方式计算的最短路径的距离将给出从矩阵的左上角到右下角的最小障碍物翻转路径。
b)障碍物数量最少的最短路径:
从矩阵的左上角到右下角开始的最短路径长度将始终相同,等于row + col-2,这可以通过从网格中的每个单元格向右或向下遍历来实现。因此,这个问题也可以使用BFS或DFS来解决,并且只从每个单元格向右或向下遍历,并将进入空白区域的成本视为0
,并将成本作为1
进入障碍。以这种方式计算的最短路径的距离将给出我们使用最短路径之一从矩阵的左上角到右下角翻转的最小障碍物数量。由于在遍历时不会有循环,我们也可以使用动态编程来解决这个问题。
以上是关于在矩阵中在源和目标之间建立路径所需的最小翻转的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 找到从矩阵的一个单元格移动到另一个单元格所需的最小移动次数