1368。在网格中创建至少一条有效路径的最低成本
难度:难
主题:数组、广度优先搜索、图、堆(优先级队列)、矩阵、最短路径
给定一个 m x n 网格。网格的每个单元格都有一个标志,指向您应该访问的下一个单元格(如果您当前位于该单元格中)。 grid[i][j] 的符号可以是:
请注意,网格单元格上可能有一些指向网格外部的标志。
您最初将从左上角的单元格 (0, 0) 开始。网格中的有效路径是沿着网格上的符号从左上角单元格 (0, 0) 开始,到右下角单元格 (m - 1, n - 1) 结束的路径。有效路径不一定是最短的。
您可以修改单元格上的符号,成本 = 1。您只能修改单元格上的符号一次。
返回使网格具有至少一条有效路径的最小成本.
示例1:
示例2:
示例 3:
约束:
提示:
解决方案:
我们可以使用0-1 BFS方法。这个想法是使用双端队列(双端队列)遍历网格,其中修改方向的成本决定将单元格添加到双端队列的前面还是后面。网格被视为一个图表,其中每个单元格根据其当前方向是否与其邻居的移动相匹配而具有加权边缘。
让我们用 PHP 实现这个解决方案:1368。在网格中创建至少一条有效路径的最低成本
<?php /** * @param Integer[][] $grid * @return Integer */ function minCost($grid) { ... ... ... /** * go to ./solution.php */ } // Example Test Cases $在网格中创建至少一条有效路径的最低成本 = [[1,1,1,1],[2,2,2,2],[1,1,1,1],[2,2,2,2]]; echo minCost($在网格中创建至少一条有效路径的最低成本) . "\n"; // Output: 3 $在网格中创建至少一条有效路径的最低成本 = [[1,1,3],[3,2,2],[1,1,4]]; echo minCost($在网格中创建至少一条有效路径的最低成本) . "\n"; // Output: 0 $在网格中创建至少一条有效路径的最低成本 = [[1,2],[4,3]]; echo minCost($在网格中创建至少一条有效路径的最低成本) . "\n"; // Output: 1 ?>
方向映射: 每个方向(1 向右、2 向左、3 向下、4 向上)都映射到运动增量数组 [dx, dy]。
0-1 BFS:
距离数组: 二维数组 $dist 跟踪到达每个单元格的最小成本。除起始单元格 (0, 0) 之外的所有单元格均使用 PHP_INT_MAX 进行初始化。
边权重:
终止: 一旦处理完所有单元格,循环就会终止。结果是$dist[$m - 1][$n - 1]中的值,代表到达右下角的最小成本。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上是在网格中创建至少一条有效路径的最低成本的详细内容。更多信息请关注PHP中文网其他相关文章!